编辑:我不知道它是什么发行版,它在一篇试卷中.
遗憾的是,我只是没有得到这个.我对Row级触发器感到非常满意,但有人可以向我解释如果触发器是语句级别,结果会有什么不同吗?
关系/语句触发/行级触发
Employee(ID VARCHAR2(30), Salary NUMBER)
Create Trigger AutoRaise
After insert on Employee
Referencing new table as NT
update Employee
Set salary = salary + (select avg(salary) from NT)
Create trigger AutoRaise
After insert on Employee
Referencing new table as NT
For each Row
Update employee
Set salary = salary + (select avg(salary) from NT)
Run Code Online (Sandbox Code Playgroud)
据我所知,在每行触发器中,它会触发受触发语句影响的每一行.声明级别触发器现在会以不同方式修改结果吗?假如我在一个语句中插入了五个元组,它会为它们设置工资等吗?如果是这样,行级别触发器的好处是什么?
我试过搜索,但我无法理解它.
谢谢,
编辑:现在,我只是密集,但要么触发产生不同的输出?对于语句级别触发器,如果我使用示例值:
在触发器创建之前的表中:
(A,50)
Run Code Online (Sandbox Code Playgroud)
创建触发器后在一个语句中添加:
(B,70), (C,30)
Run Code Online (Sandbox Code Playgroud)
第一个触发器会设置插入每个元组的工资吗?所以第一个将变为120(平均值为50,70 + 50 = 120),第二个变为80.如果这是真的,第二个触发器的结果如何不同?
不同之处在于,在语句级别触发器SELECT avg(salary) FROM NT
将返回插入行的平均工资,但在行级别的情况下,avg(salary)
始终等于salary
新记录(分别为每行执行触发器)。此外,如果没有记录受影响,则将执行语句级触发器。对于行级触发器,大多数 RDMS 在 0 条记录受影响时不会触发它。
边注。我相信问题中的触发机构仅作为示例给出;否则,我建议不要在触发器中使用递归,即使特定的 RDMS 有这样的选项。
归档时间: |
|
查看次数: |
9169 次 |
最近记录: |