Отключить триггер в другой БД (Oracle) - PullRequest
0 голосов
/ 05 февраля 2019

Могу ли я создать процедуру, которая отключает триггер в другой базе данных?Я имею в виду, могу ли я отключить его с помощью ссылки на базу данных?Мне это нужно для импорта данных в хранилище данных

1 Ответ

0 голосов
/ 06 февраля 2019

Да, вы можете сделать это.Вот как.

В удаленной базе данных (называемой ORCL) я создаю таблицу и триггер:

SQL> create table test (id number);

Table created.

SQL> create or replace trigger trg_test
  2    before insert on test
  3    for each row
  4  begin
  5    null;
  6  end;
  7  /

Trigger created.

Кроме того, в том же( remote ), я создаю процедуру, которая отключит этот триггер.Он будет использовать динамический SQL, так как вы не можете выполнить DDL в PL / SQL просто так :

SQL> create or replace procedure p_disable_trg_test as
  2  begin
  3    execute immediate 'alter trigger trg_test disable';
  4  end;
  5  /

Procedure created.

Теперь, в локальной базе данных, яСоздаю ссылку базы данных на базу данных ORCL:

SQL> create database link dbl_scott_orcl
  2    connect to scott
  3    identified by tiger
  4    using 'orcl';

Database link created.

Работает ли она?

SQL> select * from dual@dbl_scott_orcl;

D
-
X

Да, работает.Хорошо.Теперь все, что вам нужно сделать, это вызвать удаленную процедуру из локальной базы данных :

SQL> begin
  2    p_disable_trg_test@dbl_scott_orcl;
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL>

Давайте проверим состояние триггера базы данных remote :

SQL> select trigger_name, status from user_Triggers where trigger_name = 'TRG_TEST';

TRIGGER_NAME                   STATUS
------------------------------ --------
TRG_TEST                       DISABLED

SQL>

DISABLED, как и ожидалось.

...