關於觸發程式編譯和相依性
已編譯的觸發程式與定義它們的綱要物件有相依關係。如果觸發器相依的物件被刪除或變更,使觸發器與物件之間不相符,則觸發器會失效。
執行 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,瞭解觸發程式編譯和相依性的詳細資訊