Oracle IsNumber ?


Oracle 本身好像沒有檢查是否為數字的函式?
在網上找了很久好像也沒發現相關的 Exception(例外事件) 處理的東西..
只找到下面的函數..

簡單方法一 :

1
2
3
4
5
6
7
8
9
CREATE OR REPLACE FUNCTION isnumeric (p_num IN VARCHAR2) RETURN NUMBER AS
l_tst NUMBER;
BEGIN
l_tst := TO_NUMBER(p_num);
RETURN 1;
EXCEPTION
WHEN OTHERS THEN
RETURN 0;
END;

正則方法二 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE OR REPLACE FUNCTION isnumeric(str IN VARCHAR2) 
RETURN NUMBER
IS
BEGIN
IF str IS NULL THEN
RETURN 0;
ELSE
IF regexp_like(str, '^(-{0,1}+{0,1})[0-9]+(.{0,1}[0-9]+)$') THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END IF;
END isnumeric;

改良方法三 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
CREATE OR REPLACE FUNCTION ISNUMERIC(MyStr VARCHAR2) RETURN NUMBER
IS
str VARCHAR2(400);
isnum NUMBER;
num NUMBER;
BEGIN
isnum := 0;
str := TRIM(MyStr);
IF TRIM(str) IS NULL THEN
GOTO NON_NUMBER;
END IF;

BEGIN
num := TO_NUMBER(str);
isnum := 1;
EXCEPTION
WHEN INVALID_NUMBER THEN
NULL;
WHEN OTHERS THEN
NULL;
END;

<<NON_NUMBER>>
RETURN isnum;
END;