【问题标题】:How do I call a procedure of another schema from the trigger of a different schema如何从不同模式的触发器调用另一个模式的过程
【发布时间】:2020-04-18 12:46:36
【问题描述】:

我正在尝试创建一个触发器来记录特定架构(架构 DS)的所有 ddl 更改,并在另一个架构(架构 SD)中更新这些更改。

CREATE OR REPLACE TRIGGER audit_ddl_trg AFTER DDL ON SCHEMA DECLARE
    sql_text   ora_name_list_t;
    v_stmt     VARCHAR2(2000);
    n          PLS_INTEGER;
BEGIN
    n := ora_sql_txt(sql_text);
    FOR i IN 1..n LOOP v_stmt := v_stmt || sql_text(i);
    END LOOP;

    v_stmt := regexp_replace(v_stmt, 'rename[[:space:]]+.*[[:space:]]+to[[:space:]]+([a-z0-9_]+)', '\1', 1, 1,
               'i');
    IF ( ora_sysevent = 'TRUNCATE' ) THEN
        NULL;
    ELSE
        INSERT INTO audit_ddl (
            d,
            osuser,
            current_user,
            host,
            terminal,
            owner,
            type,
            name,
            sysevent,
            statements
        ) VALUES (
            sysdate,
            sys_context('USERENV', 'OS_USER'),
            sys_context('USERENV', 'CURRENT_USER'),
            sys_context('USERENV', 'HOST'),
            sys_context('USERENV', 'TERMINAL'),
            ora_dict_obj_owner,
            ora_dict_obj_type,
            ora_dict_obj_name,
            ora_sysevent,
            v_stmt
        );

        sd.insert_log(sql_text);
    END IF;

END;
/ 

但是,它似乎无法识别该过程。我尝试创建一个数据库链接。但这也行不通。有没有办法解决这个问题?

【问题讨论】:

  • 与您在此处给出的答案相同:stackoverflow.com/questions/59517432/…
  • 似乎无法识别程序是什么意思?这作为问题描述毫无意义。你看到了什么错误?
  • 顺便说一下,可能值得将audit_ddl 的某些列设置为默认值。

标签: oracle plsql ddl database-trigger


【解决方案1】:

我怀疑您在一个架构中获得了触发器,而在另一个架构中获得了表,但我不知道哪个是哪个。假设AUDIT_DDL_TRIG 在模式DS 中,表AUDIT_DDL 在模式SD 中。在这种情况下,您需要使用它所在的模式来限定表的名称,即INSERT INTO SD.AUDIT_DDL(...whatever...)。此外,架构 DS 需要有一个适当的 GRANT 以便它可以将数据存储到该表中,如 GRANT INSERT INTO SD.AUDIT_DLL TO DS

编辑

如果问题是在过程结束时对SD.INSERT_LOG 的调用,您可能需要授予架构DS 的执行权限:

GRANT EXECUTE ON SD.INSERT_LOG TO DS;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 2011-09-04
    • 2012-03-04
    相关资源
    最近更新 更多