oracle - Oracle 触发器上的 Oracle APEX 用户
问题描述
我有一个 APEX 应用程序,当记录被删除时,它会从数据库中删除记录。我在该表上有一个触发器,可以将删除的记录插入到审计表中,其中包含删除时间和删除人的用户名。如何在插入中输入用户名作为 APEX 应用程序的用户?
解决方案
我可以想出 3 种方法来按优先顺序从下面列出的触发器中获取用户名:
APEX_APPLICATION.G_USER
SYS_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')
您在触发器中使用 AGAINST,因为您可能会看到较大的性能问题。有一个演示 APEX 应用程序可以比较v('APP_USER')
to的性能,SYS_CONTEXT ('APEX$SESSION', 'APP_USER')
结果表明使用它对性能有很大影响,v('APP_USER')
尤其是在触发器之类的代码中。
推荐阅读
- javascript - Highcharts 删除箱线图周围的空间
- sql - Sql 查询令人费解
- c# - 我无法在 DataGridView 列中分离数据和时间
- r - 在包含年份的列的每一行中添加“1 月”
- ruby-on-rails - Dockerized Rails 应用程序:容器启动后速度变慢
- python - Error when using crispy forms with Django and bootstrap
- spring-amqp - 重新连接的时间太快了
- angular - routerLinkActiveOptions是什么意思?
- django - 获取用于测试的不存在对象的 id - django
- kubernetes - 在 Windows 10 上以普通用户身份启动 Minikube