【问题标题】:Oracle APEX user on Oracle TriggerOracle 触发器上的 Oracle APEX 用户
【发布时间】:2020-09-22 17:29:59
【问题描述】:

我有一个 APEX 应用程序,当记录被删除时,它会从数据库中删除记录。我在该表上有一个触发器,可以将删除的记录插入到审计表中,其中包含删除时间和删除人的用户名。如何在插入中输入用户名作为 APEX 应用程序的用户?

【问题讨论】:

    标签: oracle triggers oracle-apex


    【解决方案1】:

    我可以想出 3 种方法来按优先顺序从下面列出的触发器中获取用户名:

    1. APEX_APPLICATION.G_USER
    2. SYS_CONTEXT ('APEX$SESSION', 'APP_USER')
    3. v ('APP_USER')

    它们都可以与类似的语句一起使用:

    INSERT INTO audit_table (CHANGE_MESSAGE,
                             CHANGED_BY,
                             CHANGED_DATE)
         VALUES ('Some message',
                 COALESCE (APEX_APPLICATION.G_USER, USER),
                 CURRENT_DATE);
    

    我强烈建议您不要在触发器中使用v('APP_USER'),因为您可能会看到较大的性能问题。有一个demo APEX applicationv('APP_USER')SYS_CONTEXT ('APEX$SESSION', 'APP_USER') 的性能进行比较,结果表明使用v('APP_USER') 对性能有很大影响,尤其是在触发器之类的代码中。

    【讨论】:

    • 我使用了 COALESCE (APEX_APPLICATION.G_USER, USER),它运行良好。非常感谢。
    【解决方案2】:

    试试v('APP_USER'),例如

    insert into audit_table(user, datum) values (v('APP_USER'), sysdate);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      • 2022-07-06
      • 2020-09-08
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多