Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Disable Trigger / 19 сообщений из 19, страница 1 из 1
02.03.2016, 15:55:53
    #39183923
Free1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Disable Trigger
Написал такой скрипт:

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
02.03.2016, 16:02:06
    #39183940
Q.Tarantino
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Disable Trigger
а что такое PERSON_ABV? :)
должно быть i.trigger_name IMHO
...
Рейтинг: 0 / 0
02.03.2016, 16:04:01
    #39183941
Free1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Disable Trigger
Это имя триггера в БД.
...
Рейтинг: 0 / 0
02.03.2016, 16:10:21
    #39183955
Q.Tarantino
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Disable Trigger
Free1Это имя триггера в БД.
и что? там оно зачем???
замени на имя поля в курсоре то. и почитай про курсоры...
...
Рейтинг: 0 / 0
02.03.2016, 16:11:40
    #39183957
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Disable Trigger
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
02.03.2016, 16:12:45
    #39183959
Q.Tarantino
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Disable Trigger
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
02.03.2016, 16:16:54
    #39183970
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Disable Trigger
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
02.03.2016, 16:25:10
    #39183996
Free1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Disable Trigger
Спасибо, буду пробовать. И еще маленький под вопрос. Если у меня 6 триггеров которые относятся к 3-м разным таблицам и их нужно выключить одновременно, мне просто перечислить их через запятую?
...
Рейтинг: 0 / 0
02.03.2016, 16:32:39
    #39184012
Opus Magnum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Disable Trigger
Free1,

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

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


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

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

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

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

Еще раз всем спасибо.перфоманс тюнинг?
...
Рейтинг: 0 / 0
03.03.2016, 08:30:55
    #39184435
Viewer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Disable Trigger
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
03.03.2016, 08:45:47
    #39184440
Viewer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Disable Trigger
Relic Hunterперфоманс тюнинг?
обычно это часть типичной задачи по обновленению данных в таблицах схемы без пересоздания таблиц
...
Рейтинг: 0 / 0
03.03.2016, 10:46:50
    #39184559
Disable Trigger
а зачем ддлить триггеры.
если нужно позаливать данные, то этой сессии достаточно прикинуться стрисами.
...
Рейтинг: 0 / 0
28.09.2016, 07:10:32
    #39316650
dimyaz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Disable Trigger
кто может поделиться опытом, что же на самом деле происходит, когда на прод Бд отключают триггер дмл?
Кто-то пишет что это создает блокировки в library cache.
Кто то пишет что эта команда инвалидирует все курсоры к таблице.
Не смог найти ни одного официального документа, где описывались бы эти последствия, может кто по опыту скажет.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Disable Trigger / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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