【问题标题】:Oracle INVALID_NUMBER exception in my function does not work我的函数中的 Oracle INVALID_NUMBER 异常不起作用
【发布时间】:2019-11-05 13:26:54
【问题描述】:

下面的 Oracle 函数将“A”分配给数字变量。 但是 Exception 子句没有捕捉到INVALID_NUMBER 系统异常。

CREATE OR REPLACE FUNCTION TEST2
    (P1 IN VARCHAR2)
RETURN NUMBER AS V_VALUE NUMBER;
BEGIN
    SELECT(
        --SELECT 1/TO_NUMBER(P1)
        SELECT 'A'
        FROM DUAL
        )
    INTO V_VALUE
    FROM DUAL;
    RETURN V_VALUE;

    EXCEPTION
    WHEN INVALID_NUMBER THEN  -- If I change INVALID_NUMBER to OTHERS, then it works.
      RETURN -1;      
END;
/


SELECT TEST2('1') FROM DUAL;

当我将INVALID_NUMBER 更改为OTHERS 时,它就可以工作了。

如何修改上面的代码来触发INVALID_NUMBER异常?

【问题讨论】:

    标签: oracle exception plsql


    【解决方案1】:

    更多信息(Barbaros 已经告诉过你的)。

    当字符串转换为数字失败时,SQL 语句中会出现 INVALID_NUMBER 异常 (ORA-01722),因为该字符串不代表有效数字。 (在程序语句中,会引发 VALUE_ERROR。) 当批量 FETCH 语句中的 LIMIT 子句表达式未计算为正数时,也会引发此异常。

    比较

    SQL> select 'a'/2 from dual;
    select 'a'/2 from dual
           *
    ERROR at line 1:
    ORA-01722: invalid number
    

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

    SQL> declare
      2    l_num number;
      3  begin
      4    select 'a' / 2 into l_num from dual;
      5  end;
      6  /
    declare
    *
    ERROR at line 1:
    ORA-01722: invalid number
    ORA-06512: at line 4
    

    甲骨文不是很好吗?或多或少相同的东西,但不同的反应。

    【讨论】:

      【解决方案2】:

      因为在您的情况下出现ORA-06502 时,您会得到VALUE_ERROR。因此,将INVALID_NUMBER 替换为VALUE_ERROR

      例如;如果SELECT 语句是:

      SELECT 5
        INTO V_VALUE
        FROM DUAL
       WHERE TO_NUMBER('A')=1;
      

      你会得到INVALID_NUMBER(ORA-01722) 异常。

      【讨论】:

        猜你喜欢
        • 2017-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-23
        • 2021-07-02
        • 1970-01-01
        • 2022-01-01
        • 2012-11-29
        相关资源
        最近更新 更多