2013-02-04 49 views
16

是在PL/SQL還是一個​​新手,我一直在圍繞以下觸發複製和粘貼:當其他人升職時,有什麼特別的事情嗎?

CREATE OR REPLACE TRIGGER FOO_TRG1 
    BEFORE INSERT 
    ON FOO 
    REFERENCING NEW AS NEW OLD AS OLD 
    FOR EACH ROW 
BEGIN 
    IF :NEW.FOO_ID IS NULL THEN 
     SELECT FOO_SEQ1.NEXTVAL INTO :NEW.FOO_ID FROM DUAL; 
    END IF; 

    EXCEPTION 
     WHEN OTHERS THEN RAISE; 
END FOO_TRG1; 
/
ALTER TRIGGER FOO_TRG1 ENABLE; 

我懷疑包含的異常處理代碼做什麼都沒有,可能只是得到去除,因爲我無論如何,如果出現問題,將會收到錯誤消息。我對嗎?

(我想這樣的代碼的進一步編輯在前代碼的結果。)

回答

28

是,該異常無助,但提出同樣的錯誤了。它也用來掩蓋錯誤的實際行號。如果我是你,我會刪除它。

如:

SQL> declare 
    2 v number; 
    3 begin 
    4 select 1 into v from dual; 
    5 select 'a' into v from dual; 
    6 exception 
    7 when others 
    8 then 
    9  raise; 
10 end; 
11/
declare 
* 
ERROR at line 1: 
ORA-06502: PL/SQL: numeric or value error: character to number conversion error 
ORA-06512: at line 9 

VS:

SQL> declare 
    2 v number; 
    3 begin 
    4 select 1 into v from dual; 
    5 select 'a' into v from dual; 
    6 end; 
    7/
declare 
* 
ERROR at line 1: 
ORA-06502: PL/SQL: numeric or value error: character to number conversion error 
ORA-06512: at line 5 

中的第一個行號所指向的提高,而不是真正的行號。它可以更難追蹤錯誤。

0

它不只是什麼都不做,它正在接近犯罪。它基本上說「只是爲了好玩,我會假裝錯誤發生在這條線上,而不是真正的線。」

異常處理是整個語言中最容易被誤解的方面。以上是非常普遍的,我認爲它源於一個基本的誤解,即「未處理的異常」是一件壞事(它幾乎引發了問題 - 爲什麼你沒有處理它?)。如果只有Oracle使用術語'發生異常'或'遇到異常',那麼我們這些需要支持這些代碼的窮人將會少得多''其他'異常處理程序讓我們的生活變得悲慘。

相關問題