Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запрос в виде цикла


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 нельзя.


Наверх

Титульная страница Поиск, карта сайта Написать письмо