DB를 통해 주말, 휴일 체크하기 (오라클, 알티베이스)

     

2017년 새해가 밝았습니다. 

올해는 작년보다 연휴가 많은데요,, 사실 많진 않지만 작년에 너무 없었기 때문에 ㅎ_ㅎ


연말이 되면 내년도 휴일을 입력하는 작업을 합니다. 양력일 경우 자동으로 마킹되지만 음력으로 세는 경우는 일일이 수동으로 하고 있습니다. 사실 음력도 계산하는 법이 있기때문에 자동화 하면 좋겠지만요!!


시스템 상에서 휴일을 체크하는 것은 간단합니다. 휴일정보가 기록된 DB를 만들고 오늘 날짜를 DB에 때려서 있으면 오늘은 휴일인거고 없으면 휴일이 아닌거죠. 하지만 주말도 일일이 휴일DB에 넣어야되는 불편함이 있습니다.


하지만~! DB에는 요일정보를 출력하는 함수가 있기 때문에 쉽게 주말을 구분할 수 있습니다. 다음 쿼리를 사용하면 요일정보가 나옵니다.


SELECT to_char(sysdate, 'D') FROM DUAL;


위와같은 쿼리를 날리면 1~7의 값이 출력되며, 1 = 일요일, 7 = 토요일로 출력됩니다.

따라서 소스상에서 오늘이 휴일인지 아닌지 체크하기 위해 위와같은 쿼리를 날려 출력된 값이 1이나 7일경우 주말로 구분하면 됩니다~!


추가로 주말이 아닌 휴일은 휴일 DB에 때려서 있는지 체크하는 로직도 있어야 하겠죠~!


이 두개를 사용해 오늘이 휴일인지 아닌지 구분할 수 있습니다~

금융IT는 영업일 체크가 중요하기 때문에 아마 대부분 사용하고 있지 않을까 생각됩니다.


proC로 짜면 아래와 같아요~


EXEC SQL BEGIN DECLARE SECTION;

char    sWeek[1+1];

char    sSql[1024];

EXEC SQL END DECLARE SECTION;


sprintf(sSql, "SELECT to_char( sysdate, 'D' ) FROM DUAL;");

EXEC SQL PREPARE p_add FROM :sSql;

EXEC SQL DECLARE c_Add CURSOR FOR p_add;

EXEC SQL OPEN c_add;

EXEC SQL FETCH c_add INTO :sWeek;

EXEC SQL CLOSE c_add;


if(!(sWeek[0] == '1' || sWeek[0] == '7'))

{

//영업일

}

else

{

//주말

}


커서로 만든 이유는 일반 SELECT INTO로 하니 에러가 나더라구요. DUAL테이블에 SELECT를 때릴수 없나봐요 ><

휴일 체크로직 만드실 때 참고하세요~


반응형

댓글

Designed by JB FACTORY