![](/img/trans.png)
[英]Scope and correct use of SQLERRM? (Handling Exception PL/SQL, ORACLE)
[英]oracle pl/sql exception handling for input parameter (bad argument i.e. non numeric value for number)
我有一個帶有編號類型輸入參數的存儲過程。
CREATE OR REPLACE PROCEDURE my_procedure (p_x number)
AS
我包含如下異常處理代碼,但不處理以下代碼:
execute my_procedure ('sads')
EXCEPTION
WHEN VALUE_ERROR THEN
DBMS_OUTPUT.PUT_LINE('SQLERRM: ' || SQLERRM);
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('SQLERRM: ' || SQLERRM);
有沒有辦法改變壞 arguments 的異常?
錯誤將在調用過程時發生,而不是在過程內部發生,因此您無法在該過程本身內將錯誤捕獲為異常。 一種可能的解決方案是使用驗證 arguments 的附加程序。 在下面的示例代碼中,過程so_arg_test.my_procedure
接受 VARCHAR2,但只有當參數實際上是數字時才會調用my_procedure_hidden
。 對於其他任何事情,它都會引發值錯誤。
CREATE OR REPLACE PACKAGE so_arg_test AS
PROCEDURE my_procedure (
p_x IN VARCHAR2
);
END so_arg_test;
/
CREATE OR REPLACE
PACKAGE BODY SO_ARG_TEST AS
procedure my_procedure_hidden (p_x IN NUMBER) AS
BEGIN
-- your code
dbms_output.put_line('Inside my_procedure_hidden');
END my_procedure_hidden;
procedure my_procedure (p_x IN VARCHAR2)
AS
BEGIN
IF VALIDATE_CONVERSION(p_x AS NUMBER) = 0 THEN
RAISE VALUE_ERROR;
END IF;
my_procedure_hidden (p_x => my_procedure.p_x);
END my_procedure;
END SO_ARG_TEST;
/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.