is_number.sql
CREATE OR REPLACE FUNCTION IS_NUMBER
(
IN_STRING IN VARCHAR2 -- 文字列
)
RETURN VARCHAR2 -- 'OK' or 'NG'
--
-- 数値チェック
--
-- 入力文字列が数値かチェックする。
--
IS
L_NUMBER NUMBER ;
BEGIN
L_NUMBER := TO_NUMBER(IN_STRING) ;
RETURN('OK') ;
EXCEPTION
WHEN OTHERS THEN
RETURN('NG') ;
END IS_NUMBER ;
/
-- 以下、インスタンス内のすべてのスキーマで実行できるように共有プログラムを置くスキーマに置くことを想定。要 CREATE PUBLIC SYNONYM, DROP PUBLIC SYNONYM 権限
CREATE OR REPLACE PUBLIC SYNONYM IS_NUMBER FOR IS_NUMBER ;
GRANT EXECUTE ON IS_NUMBER TO PUBLIC ;
-- 使用例
COLUMN STRING FORMAT A20
COLUMN IS_NUMBER FORMAT A2
SELECT A.STRING
, IS_NUMBER(A.STRING) AS IS_NUMBER
FROM(
SELECT '0123456789' AS STRING FROM DUAL UNION ALL
SELECT '0123.456789' FROM DUAL UNION ALL
SELECT '-0123456789' FROM DUAL UNION ALL
SELECT '0123456789+' FROM DUAL UNION ALL
SELECT '012345 6789' FROM DUAL UNION ALL
SELECT ' 0123456789' FROM DUAL UNION ALL
SELECT '0123456789 ' FROM DUAL
) A ;
COLUMN STRING CLEAR
COLUMN IS_NUMBER CLEAR
STRING IS
-------------------- --
0123456789 OK
0123.456789 OK
-0123456789 OK
0123456789+ NG
012345 6789 NG
0123456789 OK
0123456789 OK
7行が選択されました。