Q
新老触发代码
5
A
回答
24
:new
和:old
是允许您访问特定列的新值和旧值的伪记录。如果我有一个表
CREATE TABLE foo (
foo_id NUMBER PRIMARY KEY,
bar VARCHAR2(10),
baz VARCHAR2(10)
);
,我插入一行
INSERT INTO foo(foo_id, bar, baz)
VALUES(1, 'Bar 1', 'Baz 1');
然后在行级INSERT触发器之前
:new.foo_id will be 1
:new.bar will be 'Bar 1'
:new.baz will be 'Baz 1'
而
:old.foo_id will be NULL
:old.bar will be NULL
:old.baz will be NULL
如果您然后更新该行
UPDATE foo
SET baz = 'Baz 2'
WHERE foo_id = 1
然后在更新前行级触发器
:new.foo_id will be 1
:new.bar will be 'Bar 1'
:new.baz will be 'Baz 2'
而
:old.foo_id will be 1
:old.bar will be 'Bar 1'
:old.baz will be 'Baz 1'
如果我再删除该行
DELETE FROM foo
WHERE foo_id = 1
然后在删除前行级触发器,
:new.foo_id will be NULL
:new.bar will be NULL
:new.baz will be NULL
而
:old.foo_id will be 1
:old.bar will be 'Bar 1'
:old.baz will be 'Baz 2'
2
在触发:old
记录包含触发语句的执行之前的数值,:new
记录包含执行后的值。
3
用简单的英语:
它们的别名,让您从一列是如何(旧)获取信息,它怎么会(新)。
旧的和新的值在之前和之后连续触发可用。新的列值可以在BEFORE行触发器中分配,但不能在AFTER行触发器中分配(因为触发语句在触发AFTER行触发器之前生效)。如果BEFORE行触发器更改new.column的值,则由同一语句触发的AFTER行触发器会看到BEFORE行触发器分配的更改。
相关名称也可以用在WHEN子句的布尔表达式中。在用于触发器的正文中时,冒号必须位于旧限定符和新限定符之前,但在WHEN子句或REFERENCING选项中使用限定符时不允许冒号。
2
的old
值是值before the change
和new
值是value to be changed
,因此,例如,在一个update set col1=10
,10是new
值和在列电流的值是在旧的。
在一个插入,没有旧值,只有新的和删除有没有新的价值,只有旧
相关问题
- 1. mysql的触发,新老
- 2. 新老列中的触发器
- 3. C#代码内未触发Javascript代码
- 4. 老虎机代码问题
- 5. 行级触发器代码
- 6. 触发:蹊跷的代码
- 7. 触发jQuery代码别处
- 8. JavaScript代码来触发 -
- 9. 触发代码写入
- 10. 降低代码触发类
- 11. 老伪纪录后插入触发器
- 12. 老老实实地搞混ActiveDirectory代码/类的位置
- 13. 区分用户触发事件和代码触发事件
- 14. Python:老虎机代码错误
- 15. 年龄验证代码踢人到老?
- 16. 智能债务老化代码
- 17. 欢乐跑老JAR文件代码
- 18. 老swift代码不工作(动画UIView)
- 19. Response.Redirect由于代码阻止重新提交而不能触发
- 20. 如何从WPF中的代码触发绑定源更新?
- 21. Ajax AsyncFileUpload触发服务器代码,但不更新客户端
- 22. CouchDB - 创建或更新文档时触发代码
- 23. EF 4.1代码优先:触发更新多对多
- 24. 从INSERT触发器更新时触发更新后未触发
- 25. jquery后面的代码没有触发
- 26. jQuery代码只触发一次
- 27. AWS Lambda触发器代码; Java
- 28. 执行代码/触发2个viewcontrollers
- 29. 触发PHP代码在同一页
- 30. 什么触发JavaScript代码执行?
这个功课? – Sparky
给我们一些背景 – keyser
这是一个修订问题,我正在准备,你必须回答这个问题:“触发代码中的新和旧意味着什么?” – user1300580