![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запрос в виде цикла
alsov © (2004-06-17 10:04:00)Уважаемые мастера
Нельзя ли в Оракле написать такой запрос, чтобы выбирал данные из таблицы построчно и производил с ними какие-либо действия?
Например в таблице, в одном из полей, содержатся названия триггеров, нужно эти триггеры поудалять.
Можно, конечно это сделать из программной среды (например Delphi), с помощью нескольких запросов, но хотелось бы, чтобы эти действия производил сервер.
Заранее благодарен.
P.S. Просьба сильно не ругать, я в этом деле новичёк
alsov (2004-06-17 14:59:00) [1]Всем спасибо
malkolinge (2004-06-17 14:46:00) [2]Книжку возьми по PL SQL и прочитай там про курсоры
Val (2004-06-17 14:44:00) [3]1. для полной очистки базы не нужно вручную удалять триггера, как вы думаете, что сделает с ними сервер, если вы удалите таблицу?
2. для тренировки и разбора работы циклов советую с данными работать, а не с метаданными.
3. SQL Navigator, PL/SQL Developer, TOAD
alsov (2004-06-17 12:35:00) [4]2Sergey13
Мне просто нужно было разобраться как работает цикл в оракле.
База моя - создана только для тренировки.
Причём не я один тренируюсь, поэтому решил написать скрипт полной очистки базы (повторяю - число для тренировки)
Насчёт всего остального - ты абсолютно прав.
Да, если подскажешь, какая тулза для оракла 9 лучше всего подходит, а то стандартные меня не устраивают.
Хорошо бы что-то вроде SQL Explorer'а.
Sergey13 (2004-06-17 11:53:00) [5]2alsov (17.06.04 11:34) [10]
Это скорее для потрепаться рассуждения, и я не претендую на истину.
>Например в таблице, в одном из полей, содержатся названия триггеров, нужно эти триггеры поудалять.
Если это "жизненный" пример то.
1.Как заполняется эта таблица?
2.Каков принцип занесения в нее?
3.По какому принципу твоя программа определяет, что тригер надо удалить?
Ты бы доверил некоей проге пошарить на твоей машине и поудалять разные программы, ненужные с ее точки зрения?
Мое убеждение - работа со структурой БД (тем более рабочей) обычно очень плохо автоматизируется, потому что над каждымдействием надо думать и проверять.
Потом, изменение объекта ведет к смене валидности связанных объектов. Ты уверен, что после таких твоих действий все остальное будет работать?
Удаление тригера коварная вещь - вроде все работает, а через пол года вдруг обнаруживаешь такое, что... 8-( А ты просто забыл и не подумал об этом при удалении.
Ну и последнее - работа над структурой на 99% разовая и сделать ее руками в какой нить тулзе обычно не занимает много времени, по крайней мере не намного больше чем прогу писать.
Повторю - все это мое исключительное ИМХО.
alsov (2004-06-17 11:34:00) [6]
> Не хочется каркать, но как бы ты, при таком подходе, его
> позже не проклял. 8-)
Почему так?
Sergey13 (2004-06-17 11:26:00) [7]2alsov (17.06.04 10:45) [8]
>2Reindeer Moss Eater
>Спасибо, всё получилось
Не хочется каркать, но как бы ты, при таком подходе, его позже не проклял. 8-)
alsov (2004-06-17 10:45:00) [8]2Reindeer Moss Eater
Спасибо, всё получилось
Reindeer Moss Eater (2004-06-17 10:33:00) [9]|| user_triggers.trigger_name;
... || trigg_cur.trig_name;
alsov (2004-06-17 10:31:00) [10]2Val
begin
for trigg_cur in (select trigger_name from user_triggers)
loop
EXECUTE IMMEDIATE 'DROP TRIGGER ' || user_triggers.trigger_name;
end loop;
end;
/
Val (2004-06-17 10:29:00) [11]>alsov (17.06.04 10:25) [3]
а теперь покажите что ВЫ написали
Sergey13 (2004-06-17 10:29:00) [12]2alsov (17.06.04 10:04)
Может и можно, но вот нужно ли? ИМХО - любая программа (кроме скрипта на создание базы) по изменению структуры - потенциальное (в лучшем случае) зло.
>я в этом деле новичёк
тем более!!!
alsov (2004-06-17 10:25:00) [13]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
Reindeer Moss Eater (2004-06-17 10:10:00) [14]begin
for trigg_cur in (select trig_name from trig_table)
loop
EXECUTE IMMEDIATE 'DROP TRIGGER ' || trigg_cur.trig_name;
end loop;
end;
/
Sandman25 (2004-06-17 10:09:00) [15]AFAIK нельзя.