在 FOR EACH ROW 列表的 SQL 语句中,您必须使用旧的或新的相关性名称限定对触发表中的列的引用,触发该语句有效独立于触发操作。
换句话说,如果 FOR EACH ROW 触发操作列表中的列名称未用相关性名称限定,则即使使用触发表名称限定它,仍会像该语句独立于触发操作那样解释它。对于非限定的列名称,不特别搜索触发表的定义。
DELETE FROM tab1 WHERE col_c = col_c2;
要使该语句有效,则 col_c 和 col_c2 都必须是来自 tab1 的列。如果打算使用 col_c2 作为触发表中某列的相关性引用,则必须使用旧的或新的相关性名称限定它。如果 col_c2 不是 tab1 中的列且未用旧的或新的相关性名称限定,则您将得到错误。
在有效独立于触发操作的语句中,没有 correlation 限定符的列名称引用数据库中的当前值。
CREATE DATABASE db1; CREATE TABLE empsal (empno INT, salary INT, mgr INT); CREATE TABLE mgr (eno INT, bonus INT); CREATE TABLE biggap (empno INT, salary INT, mgr INT); CREATE TRIGGER t1 UPDATE OF salary ON empsal AFTER (INSERT INTO biggap SELECT * FROM empsal WHERE salary < (SELECT bonus FROM mgr WHERE eno = mgr));
在触发操作中,来自触发表的非限定列名引用当前列值,但是触发器声明必须有效独立于触发操作。