ORA-32576: missing TYPE keyword
Cause: keyword TYPE is missing.
Action: Use TYPE keyword.
ORA-32576:缺少TYPE关键字
更新会引发ORA-32576错误的原因是触发器定义缺少“TYPE”关键字,更新只能由表级触发器来响应,语法应该是:
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER | INSTEAD OF}
{INSERT [OR] | UPDATE [OR] | DELETE}
ON table_name
[REFERENCING OLD AS o NEW AS n]
[FOR EACH ROW]
WHEN (condition)
TYPE {ROW | STATEMENT}
[ORDER integer]
[ENABLE | DISABLE]
[FOLLOWS | PRECEDES another_trigger]
{CALL proc_name |
DECLARE
var_name datatype;
[BEGIN
executable_statements;
END; ]
}
当您尝试创建表级触发器时,您可能会遇到以下错误(Oracle触发器):
SQL> CREATE OR REPLACE TRIGGER trigger_name
2 BEFORE INSERT OR UPDATE
3 ON table_name
4 REFERENCING OLD AS o NEW AS n
5 FOR EACH ROW
6 WHEN (condition)
7 BEGIN
8 null;
9 END;
ERROR at line 6:
ORA-32576: missing TYPE keyword
要解决这个错误,需要补充关键字“TYPE”到触发器定义中,语法应该是:
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER | INSTEAD OF}
{INSERT [OR] | UPDATE [OR] | DELETE}
ON table_name
[REFERENCING OLD AS o NEW AS n]
[FOR EACH ROW]
WHEN (condition)
TYPE {ROW | STATEMENT}
[ORDER integer]
[ENABLE | DISABLE]
[FOLLOWS | PRECEDES another_trigger]
{CALL proc_name |
DECLARE
var_name datatype;
[BEGIN
executable_statements;
END; ]
};
这里,TYPE紧跟WHEN指令之后,它指定触发器的类型,可为“ROW”(行触发器)或“STATEMENT”(SQL语句触发器)。因此,在上面的示例中,添加TYPE ROW(或TYPE STATEMENT)后就可以创建正确的触发器了。