我可以创建一个过程来禁用另一个数据库中的触发器吗?我的意思是,可以通过数据库链接禁用它吗? 将数据导入数据仓库时需要它
答案 0 :(得分:1)
是的,您可以这样做。就是这样。
在远程数据库(称为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.
此外,在同一个(远程)数据库中,我正在创建一个过程来禁用该触发器。它将使用动态SQL,因为您无法在PL / SQL中执行DDL,就像这样:
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>
让我们检查远程数据库的触发状态:
SQL> select trigger_name, status from user_Triggers where trigger_name = 'TRG_TEST';
TRIGGER_NAME STATUS
------------------------------ --------
TRG_TEST DISABLED
SQL>
DISABLED
,如预期。