【问题标题】:Disable trigger in another db(Oracle)在另一个数据库中禁用触发器(Oracle)
【发布时间】:2019-06-29 13:50:05
【问题描述】:

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

【问题讨论】:

    标签: sql database oracle oracle11g database-trigger


    【解决方案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.
    

    此外,在同一个 (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,正如预期的那样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-27
      • 2016-12-27
      • 1970-01-01
      • 2013-02-09
      • 2017-05-20
      • 1970-01-01
      • 2015-09-30
      • 2012-02-13
      相关资源
      最近更新 更多