簡體   English   中英

oracle 輸入參數的 pl/sql 異常處理(錯誤參數,即數字的非數值)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM