首页 > 解决方案 > Oracle 触发器上的 Oracle APEX 用户

问题描述

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

标签: oracletriggersoracle-apex

解决方案


我可以想出 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')您在触发器中使用 AGAINST,因为您可能会看到较大的性能问题。有一个演示 APEX 应用程序可以比较v('APP_USER')to的性能,SYS_CONTEXT ('APEX$SESSION', 'APP_USER')结果表明使用它对性能有很大影响,v('APP_USER')尤其是在触发器之类的代码中。


推荐阅读