powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Disable Trigger
19 сообщений из 19, страница 1 из 1
Disable Trigger
    #39183923
Free1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Написал такой скрипт:

BEGIN
FOR i IN(SELECT trigger_name FROM user_triggers where trigger_name='PERSON_ABV') LOOP

EXECUTE IMMEDIATE 'ALTER TRIGGER ' || i.PERSON_ABV || ' DISABLE';

END LOOP;
END;
/

Выдает такую ошибку:

ERROR at line 4:
ORA-06550: line 4, column 41:
PLS-00302: component 'PERSON_ABV' must be declared
ORA-06550: line 4, column 1:
PL/SQL: Statement ignored

Не пойму что нужно объявлять и как объявить. Начинающий ораклист.
...
Рейтинг: 0 / 0
Disable Trigger
    #39183940
Q.Tarantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что такое PERSON_ABV? :)
должно быть i.trigger_name IMHO
...
Рейтинг: 0 / 0
Disable Trigger
    #39183941
Free1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это имя триггера в БД.
...
Рейтинг: 0 / 0
Disable Trigger
    #39183955
Q.Tarantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Free1Это имя триггера в БД.
и что? там оно зачем???
замени на имя поля в курсоре то. и почитай про курсоры...
...
Рейтинг: 0 / 0
Disable Trigger
    #39183957
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Free1,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
BEGIN
FOR i IN(SELECT trigger_name FROM user_triggers where trigger_name='PERSON_ABV') LOOP

  EXECUTE IMMEDIATE 'ALTER TRIGGER PERSON_ABV DISABLE';

END LOOP;
END;
/



.....
stax
...
Рейтинг: 0 / 0
Disable Trigger
    #39183959
Q.Tarantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..Free1,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
BEGIN
FOR i IN(SELECT trigger_name FROM user_triggers where trigger_name='PERSON_ABV') LOOP

  EXECUTE IMMEDIATE 'ALTER TRIGGER PERSON_ABV DISABLE';

END LOOP;
END;
/




.....
stax


:) а не проще ли просто
Код: plsql
1.
2.
3.
BEGIN
  EXECUTE IMMEDIATE 'ALTER TRIGGER PERSON_ABV DISABLE';
END;
...
Рейтинг: 0 / 0
Disable Trigger
    #39183970
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Q.Tarantinostax..Free1,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
BEGIN
FOR i IN(SELECT trigger_name FROM user_triggers where trigger_name='PERSON_ABV') LOOP

  EXECUTE IMMEDIATE 'ALTER TRIGGER PERSON_ABV DISABLE';

END LOOP;
END;
/




.....
stax


:) а не проще ли просто
Код: plsql
1.
2.
3.
BEGIN
  EXECUTE IMMEDIATE 'ALTER TRIGGER PERSON_ABV DISABLE';
END;



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SQL> BEGIN
  2  FOR i IN(SELECT trigger_name FROM user_triggers where trigger_name='PERSON_ABV') LOOP
  3
  4    EXECUTE IMMEDIATE 'ALTER TRIGGER PERSON_ABV DISABLE';
  5
  6  END LOOP;
  7  END;
  8  /

PL/SQL procedure successfully completed.

SQL>
SQL> BEGIN
  2    EXECUTE IMMEDIATE 'ALTER TRIGGER PERSON_ABV DISABLE';
  3  END;
  4  /
BEGIN
*
ERROR at line 1:
ORA-04080: trigger 'PERSON_ABV' does not exist
ORA-06512: at line 2



.....
stax
...
Рейтинг: 0 / 0
Disable Trigger
    #39183996
Free1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, буду пробовать. И еще маленький под вопрос. Если у меня 6 триггеров которые относятся к 3-м разным таблицам и их нужно выключить одновременно, мне просто перечислить их через запятую?
...
Рейтинг: 0 / 0
Disable Trigger
    #39184012
Фотография Opus Magnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Free1,

Код: plsql
1.
 trigger_name in ('PERSON_ABV', 'trigger2', 'trigger3')
...
Рейтинг: 0 / 0
Disable Trigger
    #39184016
dbi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbi
Гость
Free1,

Если для ALTER, то работает только для одного триггера. Для каждого свой Alter нужен
Если для SELECT, то в условии trigger_name in ('trigger1','trigger2','trigger3')
...
Рейтинг: 0 / 0
Disable Trigger
    #39184021
Q.Tarantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..
Код: plsql
1.
ORA-04080: trigger 'PERSON_ABV' does not exist


знаешь почему? Потому что твой select не нашел триггера с таким именем :)
Зачем дисэйблить то, чего нет? :)
...
Рейтинг: 0 / 0
Disable Trigger
    #39184272
Free1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все огромное спасибо.
...
Рейтинг: 0 / 0
Disable Trigger
    #39184281
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Free1,

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

http://stackoverflow.com/questions/15659188/can-an-oracle-trigger-be-disabled-for-the-current-session
...
Рейтинг: 0 / 0
Disable Trigger
    #39184300
Free1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, за совет Relic Hunter
Была задача выключить триггера на уровне схемы.

Еще раз всем спасибо.
...
Рейтинг: 0 / 0
Disable Trigger
    #39184303
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Free1Спасибо, за совет Relic Hunter
Была задача выключить триггера на уровне схемы.

Еще раз всем спасибо.перфоманс тюнинг?
...
Рейтинг: 0 / 0
Disable Trigger
    #39184435
Фотография Viewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Free1Была задача выключить триггера на уровне схемы.
Тотально, для всех таблиц схемы
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
declare
   cursor cur_tables
   is
--   select table_name from user_tables;
      select table_name
        from dba_tables
       where owner = 'SCHEMA_NAME';
begin
   for current_table in cur_tables
   loop
      execute immediate
            'alter table '
         || current_table.table_name
         || ' disable all triggers';
   end loop;
end;
...
Рейтинг: 0 / 0
Disable Trigger
    #39184440
Фотография Viewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunterперфоманс тюнинг?
обычно это часть типичной задачи по обновленению данных в таблицах схемы без пересоздания таблиц
...
Рейтинг: 0 / 0
Disable Trigger
    #39184559
а зачем ддлить триггеры.
если нужно позаливать данные, то этой сессии достаточно прикинуться стрисами.
...
Рейтинг: 0 / 0
Disable Trigger
    #39316650
dimyaz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кто может поделиться опытом, что же на самом деле происходит, когда на прод Бд отключают триггер дмл?
Кто-то пишет что это создает блокировки в library cache.
Кто то пишет что эта команда инвалидирует все курсоры к таблице.
Не смог найти ни одного официального документа, где описывались бы эти последствия, может кто по опыту скажет.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Disable Trigger
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]