LoginSignup
2
1

More than 3 years have passed since last update.

日付 YYYYMMDD が妥当な内容か? Oracle PL/SQL

Last updated at Posted at 2019-08-20
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行が選択されました。
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1