IS_YYYYMMDD
CREATE OR REPLACE FUNCTION IS_YYYYMMDD
(
IN_YYYYMMDD IN VARCHAR2 -- YYYYMMDD
)
RETURN VARCHAR2 -- 'OK' or 'NG'
--
-- 日付 YYYYMMDD が妥当な内容か判断する。
--
IS
L_DATE DATE ;
BEGIN
L_DATE := TO_DATE(IN_YYYYMMDD, 'YYYYMMDD') ;
RETURN('OK') ;
EXCEPTION
WHEN OTHERS THEN
RETURN('NG') ; -- エラー
END IS_YYYYMMDD ;
/
-- ↓実行権をPUBLICにし、インスタンスの全スキーマから実行可能に
-- https://docs.oracle.com/cd/E57425_01/121/SQLRF/statements_9014.htm#i2155015 SQL language reference
GRANT EXECUTE ON IS_YYYYMMDD TO PUBLIC ;
-- ↓PUBLIC SYNONYM に
-- http://docs.oracle.com/cd/E57425_01/121/SQLRF/statements_7001.htm#CJAJCDDF SQL language reference
CREATE OR REPLACE PUBLIC SYNONYM IS_YYYYMMDD FOR IS_YYYYMMDD ;
-- 使用例
SQL> COLUMN YYYYMMDD FORMAT A10
SQL> COLUMN IS_YYYYMMDD FORMAT A10
SQL> WITH DATE_LIST AS -- since Oracle11.1.0
2 (
3 SELECT '20160229' AS YYYYMMDD FROM DUAL UNION ALL
4 SELECT '20170229' FROM DUAL UNION ALL
5 SELECT '20180229' FROM DUAL UNION ALL
6 SELECT '20190229' FROM DUAL UNION ALL
7 SELECT '20200229' FROM DUAL UNION ALL
8 SELECT '20210229' FROM DUAL
9 )
10 SELECT DL.YYYYMMDD
11 , IS_YYYYMMDD(DL.YYYYMMDD) AS IS_YYYYMMDD
12 FROM DATE_LIST DL ;
YYYYMMDD IS_YYYYMMD
---------- ----------
20160229 OK
20170229 NG
20180229 NG
20190229 NG
20200229 OK
20210229 NG
6行が選択されました。