【发布时间】:2020-09-22 17:29:59
【问题描述】:
我有一个 APEX 应用程序,当记录被删除时,它会从数据库中删除记录。我在该表上有一个触发器,可以将删除的记录插入到审计表中,其中包含删除时间和删除人的用户名。如何在插入中输入用户名作为 APEX 应用程序的用户?
【问题讨论】:
标签: oracle triggers oracle-apex
我有一个 APEX 应用程序,当记录被删除时,它会从数据库中删除记录。我在该表上有一个触发器,可以将删除的记录插入到审计表中,其中包含删除时间和删除人的用户名。如何在插入中输入用户名作为 APEX 应用程序的用户?
【问题讨论】:
标签: oracle triggers oracle-apex
我可以想出 3 种方法来按优先顺序从下面列出的触发器中获取用户名:
APEX_APPLICATION.G_USERSYS_CONTEXT ('APEX$SESSION', 'APP_USER')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 application 将v('APP_USER') 与SYS_CONTEXT ('APEX$SESSION', 'APP_USER') 的性能进行比较,结果表明使用v('APP_USER') 对性能有很大影响,尤其是在触发器之类的代码中。
【讨论】:
试试v('APP_USER'),例如
insert into audit_table(user, datum) values (v('APP_USER'), sysdate);
【讨论】: