在另一个数据库中禁用触发器(Oracle)

时间:2019-02-05 17:03:50

标签: sql database oracle oracle11g database-trigger

我可以创建一个过程来禁用另一个数据库中的触发器吗?我的意思是,可以通过数据库链接禁用它吗? 将数据导入数据仓库时需要它

1 个答案:

答案 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,如预期。