【问题标题】:Create trigger on Oracle from a user that listens to events for another user从一个用户为另一个用户监听事件的用户在 Oracle 上创建触发器
【发布时间】:2014-09-17 13:45:55
【问题描述】:

我有两个 Oracle 模式 A 和 B。

我可以在架构 A 中创建一个触发器来侦听在架构 B 上创建表吗? 如果是,我需要做哪些资助?

【问题讨论】:

    标签: oracle triggers schema


    【解决方案1】:

    是的,你可以。用户a需要有CREATE ANY TRIGGER

    作为 DBA:

    CREATE USER a IDENTIFIED BY a;
    GRANT CREATE SESSION, CREATE ANY TRIGGER TO a;
    
    CREATE USER b IDENTIFIED BY b;
    GRANT CREATE SESSION TO b;
    

    作为:

    CREATE OR REPLACE TRIGGER a.create_trigger
      BEFORE CREATE ON b.SCHEMA
    BEGIN
      raise_application_error(num => -20000,  msg=> 'create_trigger vetoes');
    END;
    /
    

    作为乙:

    CREATE TABLE t(i INT);
    ERROR at line 1:
    ORA-00604: error occurred at recursive SQL level 1
    ORA-20000: create_trigger vetoes
    ORA-06512: at line 2
    

    您必须微调此触发器,它不仅会触发CREATE TABLE,还会触发所有CREATE 语句...

    【讨论】:

    • 谢谢!问题:如果您使用此触发器创建策略,应该是 BEFORE CREATE 还是 AFTER CREATE?我相信 After 但我只是想确认一下
    • @user3019499 - 如果你想阻止正在创建的表然后BEFORE;但是对于您的场景,创建一个策略然后AFTER,是的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多