【发布时间】:2023-04-01 02:38:01
【问题描述】:
朋友们好日子!
所以,这是我的问题,上面写着 -
在 clientmstr 表上编写更新、删除触发器。系统 应跟踪正在更新的记录或 删除。更新或删除记录的旧值应该是 添加到 audit_trade 表中。 (使用两行单独实现 和语句触发器)
我的解决方案是这样的 -
-- For row trigger
create or replace trigger row_trigger
before delete or update on client_master
referencing old as old new as new
for each row
begin
insert into audit_table values(
:old.client_id, :old.client_name, :old.client_budget
);
end;
/
根据问题,我必须使用 statement trigger 来实现相同的功能,但我想不出可以做到的方法。我研究了语句触发器,我了解到我们不能在这里使用 :old 和 :new 。 有什么方法可以实现使用语句触发器添加审计表的相同行触发器方法吗?我刚开始学习PL/SQL才两天。我花了一整天时间在互联网上到处搜索 - 试图寻找一个例子,但我没有得到它。有人可以帮忙吗?
编辑
(1) 我正在使用 Oracle SQL Developer
(2) 正如 cmets 中有人建议的那样 - 在语句触发器中不可能做到这一点,我也这么认为。我必须在这个星期六提交我的作业。我和我的老师进行了一次对话——她说可以使用语句触发器来实现它。我问她怎么做——但她没有回答。然后我问她一个提示,她说这个(我复制粘贴她的文字)-
使用 col 作为操作和时间戳创建一个单独的表。插入更新和删除操作上的写入语句级触发器。触发器将通过在表中插入值来捕获触发的操作和时间戳。
我不明白这是什么意思或怎么做!谁能帮我解决这个问题?
【问题讨论】:
-
您使用的是 MySQL 还是 Oracle?触发代码将是特定于产品的。
-
@jarlh 我正在使用 Oracle
-
@ShreyasChavhan,简短的回答,级别语句触发器不是为此而设计的。看看这里stackoverflow.com/questions/18741342/…
-
你老师说的似乎没有道理。你想记录每行的信息,所以使用行触发器。语句触发器在这里有什么好处?我并不是说在语句触发器中记录更改行的信息是完全不可能的。我们可能可以在这里使用一些闪回查询,因此现在和几个小时(?)之前查看表,但到底是什么?