2010-07-26 24 views
5

最近,我在桌上遇到了BEFORE INSERT OR UPDATE觸發器。在此觸發器中,作者依賴於DBMS_STANDARD包的INSERTINGUPDATING函數(均返回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_ERRORCOMMIT)通常在PL/SQL代碼中使用。

+0

您是否有金屬筆記或其他公衆(或至少Oracle許可的公衆)可以查看的東西?如果不在觸發器中使用STANDARD的INSERTING/UPDATING調用,它們到底會在什麼時候被使用? – 2010-07-26 19:06:14

+0

@亞當:不,這個建議不是來自Metalink的筆記。而是直接來自Oracle支持部門的服務請求。 – 2010-07-26 20:44:01

回答

9

函數INSERTING,UPDATING和DELETING明確提供用於編寫​​觸發器代碼(請參閱trigger documentation),因此完全不禁止使用這些函數。類似地,RAISE_APPLICATION_ERROR是documented以供開發人員使用。

只要DESCribed DBMS_STANDARD,當然有一些函數在那裏我不知道,也許不應該用在你自己的代碼(我知道的所有),如GRANTEE。

通常,如果您可以找到Oracle官方文檔,告訴您如何使用某些東西,那麼可以使用它。

+0

優秀點!我們將與甲骨文進行交流澄清。 – 2010-07-26 20:48:40

+1

我懷疑1級分析師說:「aha,DBMS_STANDARD沒有記錄,而我方便的花花公子筆記本告訴客戶,如果沒有我們的指導,不要使用無證參數或功能。」 – 2010-07-27 02:52:39

相關問題