当您在触发操作中包含这些关键字时,如果这些关键字未被限定,则会产生语法错误。
如果您使用关键字作为列名,则必须使用表名限定它;例如 table.update。如果表名称和列名称都是关键字,则必须使用所有者名称限定它们(例如, owner.insert.update)。如果所有者名称、表名称和列名称都是关键字,则必须用引号将所有者名称引起来;例如 'delete'.insert.update。(这些是将保留字作为标识符的一般规则,而不是触发器的特例。如果避免使用 SQL 的关键字作为标识符,则您的代码会更易阅读和维护。)
CREATE TRIGGER t1 UPDATE OF b ON tab1 FOR EACH ROW (EXECUTE PROCEDURE p2() INTO delete, d);
CREATE TRIGGER t1 INSERT ON tab1 BEFORE (INSERT INTO tab2 SELECT * FROM tab3, 'owner1'.update);
CREATE TRIGGER t3 UPDATE OF b ON tab1 FOR EACH ROW (EXECUTE PROCEDURE p2() INTO d, tab1.delete);
视图上的 INSTEAD OF 触发器在其已触发的操作中不能包含 EXECUTE PROCEDURE INTO 语句。
CREATE TRIGGER t4 DELETE ON tab1 BEFORE (INSERT INTO tab3 SELECT deptno, SUM(exp) FROM budget GROUP BY deptno, budget.update);
CREATE TRIGGER t2 UPDATE OF a ON tab1 BEFORE (UPDATE tab2 SET a = 10, tab2.insert = 5);