SQL:语句触发VS每行
编辑:我不知道它是什么发行版,它在考卷。
可悲的是,我只是没有得到这个。 我对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)
我明白,在每一行触发器中,它会触发受触发语句影响的每一行。 现在语句级别触发器会不同地修改结果吗? 假如我在一个声明中插入了五个元组,它会为他们设置薪水等吗? 如果是这样,这里的行级触发器的好处是什么?
我试过寻找,但我无法绕过它。
谢谢,
编辑:现在,我只是密集,但会触发产生不同的输出? 对于语句级别触发器,如果我使用示例值:
在触发器创建之前的表格中:
(A,50)
在创建触发器后在一条语句中添加:
(B,70), (C,30)
第一个触发器会设置插入的每个元组的薪水,当然? 所以第一个会变成120(因为平均值是50,70 + 50 = 120),第二个变为80.如果这是真的,那么第二个触发器的结果会有什么不同?
不同的是,在语句级别触发器的情况下, SELECT avg(salary) FROM NT
将返回插入行的工资平均值,但在行级别的情况下, avg(salary)
总是等于新记录的salary
(为每行执行的触发器单独)。 另外,如果没有记录受到影响,语句级触发器将被执行。 在行级触发的情况下,当0个记录受到影响时,大多数RDMS不会触发它。
边注。 我相信问题中的触发机构仅作为例子给出; 否则,我建议不要在触发器中使用递归,即使特定的RDMS有这样的选项。
链接地址: http://www.djcxy.com/p/57269.html上一篇: SQL: Statement Triggers VS For Each Row
下一篇: css