Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Срочно нужно решить проблемку  [new]
problem
Guest
create or replace procedure usr_delete_all
as
cursor cur_temp is select table_name from dba_tables where owner='LOL';

Begin
for cur_rec in cur_temp loop

delete from cur_rec.table_name; /* а вот здесь рукается, что нет такой таблицы. */
commit;
end loop;
end usr_delete_all;

Как заставить видеть выбранные наименования таблиц?
28 апр 06, 18:43    [2615543]     Ответить | Цитировать Сообщить модератору
 Re: Срочно нужно решить проблемку  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
EXECUTE IMMEDIATE
28 апр 06, 18:46    [2615551]     Ответить | Цитировать Сообщить модератору
 Re: Срочно нужно решить проблемку  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
create or replace procedure usr_delete_all
as 
   cursor cur_temp is select table_name from dba_tables where owner='LOL';
Begin
  for cur_rec in cur_temp loop
    excecute immediate 
      'delete from '||cur_rec.table_name; /* а вот здесь рукается, что нет такой таблицы. */
      commit;
  end loop;
end usr_delete_all;
28 апр 06, 18:47    [2615555]     Ответить | Цитировать Сообщить модератору
 Re: Срочно нужно решить проблемку  [new]
problem
Guest
andrey_anonymous
create or replace procedure usr_delete_all
as 
   cursor cur_temp is select table_name from dba_tables where owner='LOL';
Begin
  for cur_rec in cur_temp loop
    excecute immediate 
      'delete from '||cur_rec.table_name; /* а вот здесь рукается, что нет такой таблицы. */
      commit;
  end loop;
end usr_delete_all;


Большое спасибо..

только execute immediate :)
28 апр 06, 18:54    [2615574]     Ответить | Цитировать Сообщить модератору
 Re: Срочно нужно решить проблемку  [new]
Proteus
Member

Откуда:
Сообщений: 1348
нет еще и DBMS_SQL может попочь.
28 апр 06, 18:59    [2615589]     Ответить | Цитировать Сообщить модератору
 Re: Срочно нужно решить проблемку  [new]
problem
Guest
При использовании excecute immediate ругается на дочерние талицы ORA-02292.
Это как то проигнорировать можно, чтоб процедура не прерывалась?
28 апр 06, 19:16    [2615626]     Ответить | Цитировать Сообщить модератору
 Re: Срочно нужно решить проблемку  [new]
problem
Guest
Proteus
нет еще и DBMS_SQL может попочь.


Если можно пример для текущего конкретного случая..
28 апр 06, 19:17    [2615632]     Ответить | Цитировать Сообщить модератору
 Re: Срочно нужно решить проблемку  [new]
Proteus
Member

Откуда:
Сообщений: 1348
CREATE OR REPLACE PROCEDURE usr_delete_all
AS
   CURSOR cur_temp
   IS
      SELECT table_name
        FROM dba_tables
       WHERE owner = 'LOL';

   dc   BINARY_INTEGER;
BEGIN
   dc := DBMS_SQL.open_cursor;

   FOR cur_rec IN cur_temp
   LOOP
      DBMS_SQL.parse (dc,
                      'delete from ' || cur_rec.table_name,
                      DBMS_SQL.native
                     );
      DBMS_SQL.EXECUTE (dc);
      COMMIT;
   END LOOP;

   IF DBMS_SQL.is_open (dc)
   THEN
      DBMS_SQL.close_cursor (dc);
   END IF;
END usr_delete_all;


Вот так будет через DBMS_SQL;

Но у тебя похоже проблема совсем в другом. У тебя оказывается есть ключи ссылочной целостности... Ты об этом ни словом не обмолвился.

Для того чтобы удалить все данные из схемы при этом не обращая внимания на ключи ссылочной целостности есть несколько путей.

1. отключить эти ключи а подом удалять данные.
2. изменить ключи добавив опцию каскадного удаления
3. експорт, удаление пользователя, импорт без данных rows=no
4. доработать скрипт обработав исключительную ситуацию ORA-02292 и запускать его несколько раз пока в таблицах есть данные...
5. удалять из таблиц в порядке от дочерних к родительским для этого изменить курсор таким образом чтобы дочерние таблицы шли впереди.

ps: а может у тебя еще и триггера есть?
28 апр 06, 19:33    [2615675]     Ответить | Цитировать Сообщить модератору
 Re: Срочно нужно решить проблемку  [new]
problem
Guest
Proteus
[src oracle]
1. отключить эти ключи а подом удалять данные.
2. изменить ключи добавив опцию каскадного удаления
3. експорт, удаление пользователя, импорт без данных rows=no
4. доработать скрипт обработав исключительную ситуацию ORA-02292 и запускать его несколько раз пока в таблицах есть данные...
5. удалять из таблиц в порядке от дочерних к родительским для этого изменить курсор таким образом чтобы дочерние таблицы шли впереди.

ps: а может у тебя еще и триггера есть?


1.Много и муторно..
2.Ключи надо оставить.. удалить требуется только данные ... потом будет залив данных из другой схемы..
3.експ не пашет..
4. КАК ???
5. Больше 1000 таблиц..
28 апр 06, 19:40    [2615696]     Ответить | Цитировать Сообщить модератору
 Re: Срочно нужно решить проблемку  [new]
problem
Guest
Тригера есть... я их уже отключил :))
28 апр 06, 19:40    [2615699]     Ответить | Цитировать Сообщить модератору
 Re: Срочно нужно решить проблемку  [new]
problem
Guest
благодаря данному форуму отремонтировал экспорт..(несовпадающая версия)
перенес юзвера без записей..
начал переливать данные..
Всем спасибо за советы.
28 апр 06, 20:42    [2615811]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Срочно нужно решить проблемку  [new]
stich2
Member

Откуда:
Сообщений: 14
Извините, использую вышепреведенный пример.
А у меня ругается у же на этапе определения курсора. Что делать?????

create or replace procedure usr_delete_all
as
cursor cur_temp is select table_name from dba_tables where owner='LOL';/* а вот здесь рукается, что нет такой таблицы. */


Begin
for cur_rec in cur_temp loop

delete from cur_rec.table_name; commit;
end loop;
end usr_delete_all;

Как заставить видеть выбранные наименования таблиц?
19 фев 08, 12:21    [5309203]     Ответить | Цитировать Сообщить модератору
 Re: Срочно нужно решить проблемку  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116074
stich2
Извините, использую вышепреведенный пример.
А у меня ругается у же на этапе определения курсора. Что делать?????

create or replace procedure usr_delete_all
as
cursor cur_temp is select table_name from dba_tables where owner='LOL';/* а вот здесь рукается, что нет такой таблицы. */


Begin
for cur_rec in cur_temp loop

delete from cur_rec.table_name; commit;
end loop;
end usr_delete_all;

Как заставить видеть выбранные наименования таблиц?


ИМХО напрасно отрыли.
Похоже, что он у Вас не видит dba_tables.
Проверьте гранты, сверяясь также с ТОПОМ N4 в Топе популярных вопросов...
19 фев 08, 12:24    [5309224]     Ответить | Цитировать Сообщить модератору
 Re: Срочно нужно решить проблемку  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
stich2
cursor cur_temp is select table_name from dba_tables where owner='LOL';/* а вот здесь рукается, что нет такой таблицы. */
FAQ4
19 фев 08, 12:24    [5309225]     Ответить | Цитировать Сообщить модератору
 Re: Срочно нужно решить проблемку  [new]
Madness
Member

Откуда: Москва
Сообщений: 648
stich2
А у меня ругается у же на этапе определения курсора. Что делать?????

Видимо выдать соответствующий грант :)
19 фев 08, 12:24    [5309231]     Ответить | Цитировать Сообщить модератору
 Re: Срочно нужно решить проблемку  [new]
stich2
Member

Откуда:
Сообщений: 14
на счет грантов врятли, т.к. тут же делаю этот же запрос в SQL окне и все работает.
А вот ругается когда пытаю компилировать функцию с выше описанным курсором
19 фев 08, 12:27    [5309263]     Ответить | Цитировать Сообщить модератору
 Re: Срочно нужно решить проблемку  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116074
stich2
на счет грантов врятли, т.к. тут же делаю этот же запрос в SQL окне и все работает.
А вот ругается когда пытаю компилировать функцию с выше описанным курсором


Вы как, в ТОП еще не топали ?
19 фев 08, 12:28    [5309277]     Ответить | Цитировать Сообщить модератору
 Re: Срочно нужно решить проблемку  [new]
Madness
Member

Откуда: Москва
Сообщений: 648
stich2
на счет грантов врятли, т.к. тут же делаю этот же запрос в SQL окне и все работает.
А вот ругается когда пытаю компилировать функцию с выше описанным курсором

По ссылкам не ходим, не читаем? :)
19 фев 08, 12:29    [5309281]     Ответить | Цитировать Сообщить модератору
 Re: Срочно нужно решить проблемку  [new]
stich2
Member

Откуда:
Сообщений: 14
Jannny
stich2
cursor cur_temp is select table_name from dba_tables where owner='LOL';/* а вот здесь рукается, что нет такой таблицы. */
FAQ4


Посмотрел ФАКи, наверно действительно проблемка в назначении прав, поковыряюсь ещё.
Спасибо за пинок в нужном направлении
19 фев 08, 12:30    [5309301]     Ответить | Цитировать Сообщить модератору
 Re: Срочно нужно решить проблемку  [new]
stich2
Member

Откуда:
Сообщений: 14
Урраа ! Заработала.. Спасибо всем !!!!!!!!! :-)
19 фев 08, 12:49    [5309469]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить