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