下面的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
异常生效? 最佳答案
一些更多信息(有关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
Oracle不好吗?差不多是同一件事,但反应却不同。
关于oracle - 我的函数中的Oracle INVALID_NUMBER异常不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56724707/