最近,我在桌上遇到了BEFORE INSERT OR UPDATE
觸發器。在此觸發器中,作者依賴於DBMS_STANDARD
包的INSERTING
和UPDATING
函數(均返回BOOLEAN
)來確定在插入之前或更新之前是觸發了觸發器。應該在PL/SQL代碼中使用DBMS_STANDARD包的過程和/或函數嗎?
例如:
CREATE OR REPLACE TRIGGER CUSTOMER_TRIGGER
BEFORE INSERT OR UPDATE ON CUSTOMER
FOR EACH ROW
BEGIN
IF INSERTING THEN
/* Some code */
END IF;
IF UPDATING THEN
/* Some other code */
END IF;
END;
是的,我知道有兩個,單個觸發器可以寫單獨處理這兩個事件。這不是這個問題的關鍵。
在對這些函數接收到的錯誤進行故障診斷後,我們收到了來自Oracle Support的單詞「dbms_standard例程並不真正由用戶程序調用」。這是真的?
我覺得這有點奇怪,考慮到其他程序(如RAISE_APPLICATION_ERROR
和COMMIT
)通常在PL/SQL代碼中使用。
您是否有金屬筆記或其他公衆(或至少Oracle許可的公衆)可以查看的東西?如果不在觸發器中使用STANDARD的INSERTING/UPDATING調用,它們到底會在什麼時候被使用? – 2010-07-26 19:06:14
@亞當:不,這個建議不是來自Metalink的筆記。而是直接來自Oracle支持部門的服務請求。 – 2010-07-26 20:44:01