영업일 function

oracle | 2008/12/11 14:24 | 구라구렁이
--------------------------------------------------------------------------------
--함  수  명 : GET_BIZ_DT
--작  성  자 : coue
--작  성  일 : 2008.12.11
--내      용 : N일 이후(이전) 영업일 가져오기
--------------------------------------------------------------------------------
--변  경  일 :
--변  경  자 :
--------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION COUE.GET_BIZ_DT (
    p_day           NUMBER
) RETURN VARCHAR2 IS

    v_date   VARCHAR2(8);

BEGIN
    v_date   :=  '';
    --------------------------------------------------------------------------------
    IF  p_day >= THEN
        SELECT  TO_CHAR(YMD, 'YYYYMMDD')    AS  YMD
          INTO  v_date
          FROM (
                SELECT  /*+INDEX_ASC(TABLE_NAME TABLE_INDEX_NAME)*/
                        YMD         AS  YMD
                       ,ROWNUM - 1  AS  RNO
                  FROM  TABLE_NAME
                 WHERE  SDAY_YN     =   'Y'  --영업일여부
                   AND  YMD         >=  TRUNC(SYSDATE, 'DD')
               )
         WHERE  RNO =   p_day;
    --------------------------------------------------------------------------------
    ELSE
        SELECT  TO_CHAR(YMD, 'YYYYMMDD')    AS  YMD
          INTO  v_date
          FROM (
                SELECT  /*+INDEX_DESC(TABLE_NAME TABLE_INDEX_NAME)*/
                        YMD         AS  YMD
                       ,ROWNUM      AS  RNO
                  FROM  TABLE_NAME
                 WHERE  SDAY_YN     =   'Y'  --영업일여부
                   AND  YMD         <   TRUNC(SYSDATE, 'DD')
               )
         WHERE  RNO =   ABS(p_day);
    --------------------------------------------------------------------------------
    END IF;
    --------------------------------------------------------------------------------
    RETURN  v_date;
    --------------------------------------------------------------------------------
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            RETURN '';
        WHEN OTHERS THEN
            RETURN '';

END GET_BIZ_DT;




* 어느 프로젝트에 투입되어도 반드시 존재하여야 하는 영업일 구하기.

* Ex> 3일 후 영업일 구하기
         SELECT  GET_BIZ_DT(3) FROM  DAUL
* Ex> 3일 전 영업일 구하기
         SELECT  GET_BIZ_DT(-3) FROM  DAUL