Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.11;
Скачать: CL | DM;

Вниз

Запрос в виде цикла   Найти похожие ветки 

 
alsov   (2004-06-17 10:04) [0]

Уважаемые мастера

Нельзя ли в Оракле написать такой запрос, чтобы выбирал данные из таблицы построчно и производил с ними какие-либо действия?
Например в таблице, в одном из полей, содержатся названия триггеров, нужно эти триггеры поудалять.
Можно, конечно это сделать из программной среды (например Delphi), с помощью нескольких запросов, но хотелось бы, чтобы эти действия производил сервер.

Заранее благодарен.

P.S. Просьба сильно не ругать, я в этом деле новичёк


 
Sandman25 ©   (2004-06-17 10:09) [1]

AFAIK нельзя.


 
Reindeer Moss Eater ©   (2004-06-17 10:10) [2]

begin
for trigg_cur in (select trig_name from trig_table)
loop
 EXECUTE IMMEDIATE "DROP TRIGGER " || trigg_cur.trig_name;
end loop;
end;
/


 
alsov   (2004-06-17 10:25) [3]

2Reindeer Moss Eater

не хочет, ругается
Пишет вот что:

EXECUTE IMMEDIATE "DROP TRIGGER " || user_triggers.trigger_name;
                                                   *
ошибка в строке 4:
ORA-06550: line 4, column 53:
PLS-00357: Table,View Or Sequence reference "USER_TRIGGERS.TRIGGER_NAME" not allowed in this context
ORA-06550: line 4, column 2:
PL/SQL: Statement ignored


 
Val ©   (2004-06-17 10:29) [4]

>alsov   (17.06.04 10:25) [3]
а теперь покажите что ВЫ написали


 
Sergey13 ©   (2004-06-17 10:29) [5]

2alsov   (17.06.04 10:04)
Может и можно, но вот нужно ли? ИМХО - любая программа (кроме скрипта на создание базы) по изменению структуры - потенциальное (в лучшем случае) зло.

>я в этом деле новичёк
тем более!!!


 
alsov   (2004-06-17 10:31) [6]

2Val

begin
for trigg_cur in (select trigger_name from user_triggers)
loop
EXECUTE IMMEDIATE "DROP TRIGGER " || user_triggers.trigger_name;
end loop;
end;
/


 
Reindeer Moss Eater ©   (2004-06-17 10:33) [7]

|| user_triggers.trigger_name;

... || trigg_cur.trig_name;


 
alsov   (2004-06-17 10:45) [8]

2Reindeer Moss Eater

Спасибо, всё получилось


 
Sergey13 ©   (2004-06-17 11:26) [9]

2alsov   (17.06.04 10:45) [8]
>2Reindeer Moss Eater
>Спасибо, всё получилось
Не хочется каркать, но как бы ты, при таком подходе, его позже не проклял. 8-)


 
alsov   (2004-06-17 11:34) [10]


> Не хочется каркать, но как бы ты, при таком подходе, его
> позже не проклял. 8-)


Почему так?


 
Sergey13 ©   (2004-06-17 11:53) [11]

2alsov   (17.06.04 11:34) [10]
Это скорее для потрепаться рассуждения, и я не претендую на истину.

>Например в таблице, в одном из полей, содержатся названия триггеров, нужно эти триггеры поудалять.
Если это "жизненный" пример то.
1.Как заполняется эта таблица?
2.Каков принцип занесения в нее?
3.По какому принципу твоя программа определяет, что тригер надо удалить?
Ты бы доверил некоей проге пошарить на твоей машине и поудалять разные программы, ненужные с ее точки зрения?
Мое убеждение - работа со структурой БД (тем более рабочей) обычно очень плохо автоматизируется, потому что над каждым действием надо думать и проверять.
Потом, изменение объекта ведет к смене валидности связанных объектов. Ты уверен, что после таких твоих действий все остальное будет работать?
Удаление тригера коварная вещь - вроде все работает, а через пол года вдруг обнаруживаешь такое, что... 8-( А ты просто забыл и не подумал об этом при удалении.
Ну и последнее - работа над структурой на 99% разовая и сделать ее руками в какой нить тулзе обычно не занимает много времени, по крайней мере не намного больше чем прогу писать.

Повторю - все это мое исключительное ИМХО.


 
alsov   (2004-06-17 12:35) [12]

2Sergey13

Мне просто нужно было разобраться как работает цикл в оракле.
База моя - создана только для тренировки.
Причём не я один тренируюсь, поэтому решил написать скрипт полной очистки базы (повторяю - число для тренировки)

Насчёт всего остального - ты абсолютно прав.

Да, если подскажешь, какая тулза для оракла 9 лучше всего подходит, а то стандартные меня не устраивают.
Хорошо бы что-то вроде SQL Explorer"а.


 
Val ©   (2004-06-17 14:44) [13]

1. для полной очистки базы не нужно вручную удалять триггера, как вы думаете, что сделает с ними сервер, если вы удалите таблицу?
2. для тренировки и разбора работы циклов советую с данными работать, а не с метаданными.
3. SQL Navigator, PL/SQL Developer, TOAD


 
malkolinge ©   (2004-06-17 14:46) [14]

Книжку возьми по PL SQL и прочитай там про курсоры


 
alsov   (2004-06-17 14:59) [15]

Всем спасибо



Страницы: 1 вся ветка

Текущий архив: 2004.07.11;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.043 c
1-1088264007
Damager
2004-06-26 19:33
2004.07.11
Total Commander 6


1-1088202560
AndrewVolkov
2004-06-26 02:29
2004.07.11
ListView изменение ширины столбца?


1-1088372750
P@vel
2004-06-28 01:45
2004.07.11
Threads


1-1088072674
Anatoliy
2004-06-24 14:24
2004.07.11
Распаковать буфер


14-1087993576
vecna
2004-06-23 16:26
2004.07.11
Не пятница, но тем не менее...