在另一个数据库中禁用触发器(Oracle)
Disable trigger in another db(Oracle)
我可以创建一个过程来禁用另一个数据库中的触发器吗?我的意思是,我可以用数据库 link 禁用它吗?
我需要它来将数据导入数据仓库
是的,你可以做到。方法如下。
在 远程 数据库(称为 ORCL
)中,我正在创建一个 table 和一个触发器:
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.
现在,在 local 数据库中,我正在为 ORCL
数据库创建一个 link 数据库:
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
,符合预期。
我可以创建一个过程来禁用另一个数据库中的触发器吗?我的意思是,我可以用数据库 link 禁用它吗? 我需要它来将数据导入数据仓库
是的,你可以做到。方法如下。
在 远程 数据库(称为 ORCL
)中,我正在创建一个 table 和一个触发器:
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.
现在,在 local 数据库中,我正在为 ORCL
数据库创建一个 link 数据库:
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
,符合预期。