我不推薦這種做法GOTO:正如其他人已經說過,例外是來處理PL/SQL錯誤的正確方法。但是,以解決您的具體問題,你可以這樣做:
BEGIN
IF V_SYS_ERROR <> 0 THEN
GOTO SQL_ERROR;
END IF;
GOTO PROC_END;
<<SQL_ERROR>>
V_SYS_ERROR_MSG := SUBSTR(SQLERRM, 1, 252);
DBMS_OUTPUT.PUT_LINE('ERROR IN EXECUTION IN PROCEDURE');
DBMS_OUTPUT.PUT_LINE('THE ERROR CODE IS ' || V_SYS_ERROR || '- ' ||
V_SYS_ERROR_MSG);
<<PROC_END>>
NULL;
END;
當然,這還涉及到改變代碼,所以如果你這樣做,爲什麼不這樣做正確呢?即
DECLARE
SQL_ERROR EXCEPTION;
BEGIN
IF V_SYS_ERROR <> 0 THEN
RAISE SQL_ERROR;
END IF;
EXCEPTION
WHEN SQL_ERROR THEN
V_SYS_ERROR_MSG := SUBSTR(SQLERRM, 1, 252);
DBMS_OUTPUT.PUT_LINE('ERROR IN EXECUTION IN PROCEDURE');
DBMS_OUTPUT.PUT_LINE('THE ERROR CODE IS ' || V_SYS_ERROR || '- ' ||
V_SYS_ERROR_MSG);
RAISE;
END;
順便提一下,DBMS_OUTPUT.PUT_LINE不適合於在生產應用程序的系統錯誤消息的輸出。僅在開發過程中將其用於調試。
您提到的方式,我們將不得不在異常發生時處理異常?但是,這對我們來說不是一個好選擇。我們正在將大量的sql server存儲過程轉換爲oracle,並使用我們使用的工具(sql開發人員)製作了goto語句。我們討厭進入每個SP並開始搞亂邏輯 – Omnipresent 2009-10-13 15:33:57
@Omnipresent:當你說「SQL開發者」時,你是指Oracle SQL Developer還是其他一些同名的工具? – 2009-10-14 10:09:19
Oracle sql Developer – Omnipresent 2009-10-15 18:11:05