关于触发器编译和相关性
已编译的触发器依赖于定义它们所基于的方案对象。如果某个触发器所依赖的对象已删除或更改,从而导致触发器和对象间出现不匹配,则触发器将失效。
运行 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 以了解有关触发器编译和依赖性的详细信息