【发布时间】:2019-06-29 13:50:05
【问题描述】:
我可以创建一个过程来禁用另一个数据库中的触发器吗?我的意思是,我可以使用数据库链接禁用它吗? 我需要它来将数据导入数据仓库
【问题讨论】:
标签: sql database oracle oracle11g database-trigger
我可以创建一个过程来禁用另一个数据库中的触发器吗?我的意思是,我可以使用数据库链接禁用它吗? 我需要它来将数据导入数据仓库
【问题讨论】:
标签: sql database oracle oracle11g database-trigger
是的,你可以这样做。方法如下。
在一个远程数据库(称为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,因为您无法在 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>
让我们检查一下remote数据库的触发状态:
SQL> select trigger_name, status from user_Triggers where trigger_name = 'TRG_TEST';
TRIGGER_NAME STATUS
------------------------------ --------
TRG_TEST DISABLED
SQL>
DISABLED,正如预期的那样。
【讨论】: