关于触发器编译和相关性

已编译的触发器依赖于定义它们所基于的方案对象。如果某个触发器所依赖的对象已删除或更改,从而导致触发器和对象间出现不匹配,则触发器将失效。

运行 CREATE TRIGGER 语句将会编译所创建的触发器。如果此编译导致错误,则 CREATE TRIGGER 语句将会失败。要查看编译错误,请使用以下语句:

SELECT * FROM USER_ERRORS WHERE TYPE = 'TRIGGER';

已编译的触发器依赖于定义它们所基于的方案对象。例如 NEW_EVALUATION_TRIGGER 依赖于 EVALUATIONS 表。

CREATE OR REPLACE
TRIGGER NEW_EVALUATION_TRIGGER
BEFORE INSERT ON EVALUATIONS
FOR EACH ROW
BEGIN
  :NEW.evaluation_id := evaluations_seq.NEXTVAL;
END;

要查看触发器所依赖的方案对象,请使用以下语句:

SELECT * FROM ALL_DEPENDENCIES WHERE TYPE = 'TRIGGER';

如果某个触发器所依赖的对象已删除或更改,从而使触发器和对象间出现不匹配,则触发器将失效。下次调用该触发器后,它将重新编译。要立即重新编译触发器,请使用带有 COMPILE 子句的 ALTER TRIGGER 语句,如以下示例中所示。

ALTER TRIGGER NEW_EVALUATION_TRIGGER COMPILE;

另请参阅: Oracle Database PL/SQL Language Reference 以了解有关触发器编译和依赖性的详细信息