Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.049 c
4-1085812594
mef
2004-05-29 10:36
2004.07.11
регистрайия службы


3-1086945837
Xmen
2004-06-11 13:23
2004.07.11
Oracle


14-1087761409
Yegorchic
2004-06-20 23:56
2004.07.11
Принтер и цвет...


4-1085867814
keymaster
2004-05-30 01:56
2004.07.11
Как передать данные через USB


1-1088190077
zep
2004-06-25 23:01
2004.07.11
ComboBox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский