【发布时间】:2021-04-13 14:58:41
【问题描述】:
我正在使用一个大型数据库,它有许多数据生成器,基本上每天都会插入和更新大量数据。我有一个触发器,每次更新或插入时都会更新每一行,我使用以下代码从 apex 应用程序输入人名(来自 apex 的用户)
NVL(v('APP_USER'),USER)
当有大量数据输入时,我的问题出现了,例如,一个人 (John) 正在生成 500,000 条记录,当 john 生成此数据时,每一行都经过审计,但由于 john 生成了多个用户顶级应用程序出现在审核中。
所以场景是 john 单击一个按钮以生成数据,并且在审计字段中,显示了多个用户名(Mary、John、Peter)
有人知道为什么会这样吗?
整个代码,很通用
TRIGGER trg_tableA before insert or update
on tableA REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
begin
:new.insert_date:=sysdate;
:new.inserted_by:= nvl(V('APP_USER'),USER);
:new.modified_date:=sysdate;
:new.modified_by:= nvl(V('APP_USER'),USER);
end trg_tableA;
提前谢谢你
【问题讨论】:
-
也许是因为 Mary 和 Peter 也修改了其中的一些行?
-
没有看到实际执行的代码,其他人很难理解发生了什么。你能分享一些生成审计行的代码吗?
-
@Littlefoot 不,没有为他们指定行。只有生成的人,他们的名字应该出现
-
@EJEgyed 我添加了代码,它非常通用
-
然后从触发器中删除
or update。因为,John 可能正在“生成”(插入)行,但如果 Mary 或 Peter 更新其中一些,他们的名称将存储在审计列中。
标签: oracle triggers oracle-apex oracle19c oracle-apex-20.2