Да, вы можете сделать это.Вот как.
В удаленной базе данных (называемой 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
, как и ожидалось.