何时使用相关性名称

在 FOR EACH ROW 列表的 SQL 语句中,您必须使用旧的或新的相关性名称限定对触发表中的列的引用,触发该语句有效独立于触发操作。

换句话说,如果 FOR EACH ROW 触发操作列表中的列名称未用相关性名称限定,则即使使用触发表名称限定它,仍会像该语句独立于触发操作那样解释它。对于非限定的列名称,不特别搜索触发表的定义。

例如,假设以下 DELETE 语句是触发器的 FOR EACH ROW 部分中的触发部分:
DELETE FROM tab1 WHERE col_c = col_c2;

要使该语句有效,则 col_ccol_c2 都必须是来自 tab1 的列。如果打算使用 col_c2 作为触发表中某列的相关性引用,则必须使用旧的或新的相关性名称限定它。如果 col_c2 不是 tab1 中的列且未用旧的或新的相关性名称限定,则您将得到错误。

在有效独立于触发操作的语句中,没有 correlation 限定符的列名称引用数据库中的当前值。

下一个示例中,在触发器 t1 的触发操作中,相关子查询的 WHERE 子句中的 mgr 是触发表中的非限定列。在此情况中,mgr 引用 empsal 中的当前列值,因为 INSERT 语句有效独立于触发操作。
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));

在触发操作中,来自触发表的非限定列名引用当前列值,但是触发器声明必须有效独立于触发操作。