펑션 질문 드립니다. 0 6 3,826

by 강서꽃미남 FUNCTION SQL [2013.12.19 13:56:03]




안녕하세요. 오랜만에 업무 관련 질문을 드립니다.
제가 sql을 많이 짜보지 않아 낯서네요..

현재 로직상으로는 이렇습니다.
날짜를 입력받게되면(매월 2째주 수요일로 만들고 싶습니다. 자동) 우선 a테이블에 저장되어 있는 휴일들을 읽어냅니다.. 
그 a테이블에 만약 없다고 한다고, date_function 이라는 펑션으로, 앞으로 하루 뒤로 하루(정상일경우 그 날짜겠죠-입력받은)
하지만, 2014년 9월 10일이 휴일은 아니지만, 사내 대체휴가날입니다.
그래서 앞으로 하루 뒤로 하루하게 되면 그 전 주 금요일로 가게 되겠죠.(휴일 넘기 때문)
만약, 여기서 정상적인 영업일이라고 한다면, 또 다른 프로시저에서 OK를 뱉어냅니다. 이게 정상인 것인데요..

지금 총 1개의 테이블(휴일), data_funcation(앞으로가기 뒤로가기_정상체크), ilja_check(ok, no) 세개가 있습니다.
이걸 이제 하나로 만들고, 자동으로 매년 이 펑션을 사용하려고 하는데 어떻게 구현하는게 좋을까요..?

중요 핵심 로직만(보안상) ...
data_function >
while loopcnt > 0 loop <> select to_char((to_date(w_ilja,'yyyymmdd')+w_past_future),'d'), to_char((to_date(w_ilja,'yyyymmdd')+w_past_future),'yyyymmdd') into o_yoil, o_ilja from dual; if o_yoil = '1' then /*일요일*/ w_ilja := o_ilja; goto label_a; elsif o_yoil = '7' and o_ilja > '20020701' then /*토요일 : 토요휴무관련*/ w_ilja := o_ilja; goto label_a; else /*평일*/ begin select hyu_ilja into w_ilja from uill where hyu_ilja = o_ilja; /*평일이지만 특정공휴일이다*/ w_ilja := o_ilja; goto label_a; exception when NO_DATA_FOUND then w_ilja := o_ilja; /*평일이며,영업일이다*/ end; end if;


ilja_check >
  begin
        ls_ilja       := i_ilja;
        ls_jijunil_ok := 'NO';
        if  (ls_ilja = '20140108' or ls_ilja = '20140205' or
             ls_ilja = '20140305' or ls_ilja = '20140409' or
             ls_ilja = '20140507' or ls_ilja = '20140611' or
             ls_ilja = '20140709' or ls_ilja = '20140806' or
             ls_ilja = '20140905' or ls_ilja = '20141008' or
             ls_ilja = '20141105' or ls_ilja = '20141210'
             ) then
             ls_jijunil_ok := 'OK';
        else
             ls_jijunil_ok := 'NO';
        end if;
       jijunil_ok := ls_jijunil_ok;
       return(jijunil_ok);
  end;
by 우리집아찌 [2013.12.19 14:17:47]
WORKING DAY 찾는건가요? 설명이 난해해요..

by 강서꽃미남 [2013.12.19 14:33:17]
네 맞습니다. 그날이 평일(영업일) 인지 ..
만약 9일이 평일이고 수요일이 맞다. 그러면 현재는 OK를 뱉어내서 다른 프로그램상에서 작업을 합니다.

정상인지와, 그 해당 날짜를 알고 싶어요.

by 마농 [2013.12.19 14:32:32]

설명이 두서없네요. 너무 많구요.
중간과정을 일일이 다 설명하는게 오히려 더 안좋은 듯 합니다.
최초 입력값에 따른 최종 출력값이 추출되는 기준 설명
몇가지 케이스별 예시자료와 함께
핵심적인 단어만 골라 질문하는게 나을 듯 하네요.


모호한 표현(둘째주 수요일)은 좀더 명확하게...
2013년11월의 경우 둘째주 수요일은 과연 11/6 일까요? 11/13 일까요?


by 강서꽃미남 [2013.12.19 14:36:26]
아 마농님, 질문에 두서가 너무 없었습니다..
입력받는 값은, 예를들어
20140108을 입력하게 되면, 펑션안에서 우선 이 일자에 공휴일(테이블)은 아닌지?
그렇다면 정상인지(+1,-1일을 하여 입력받은 값과 동일한 날인지)
다 맞다면 OK를 뱉어내는 것을 하나로 구현하고 싶습니다.

by 강서꽃미남 [2013.12.19 14:37:49]
select date_func(date_func ('20140905',1 ),-1) from dual; >> 정상(20140905)
select * from hyuil order by ilja (휴가들이 입력되어 있는 테이블)
select ijunil_check('20140905') from dual; >> 최종 OK

by 마농 [2013.12.19 17:37:53]
20140108을 입력하게 되면, 펑션안에서 우선 이 일자에 공휴일(테이블)은 아닌지?
==> 공휴일인지 아닌지를 판단한다는 말이죠? 판단해서 결과는 ?
그렇다면 정상인지(+1,-1일을 하여 입력받은 값과 동일한 날인지)
==> +1, -1 을 하는데 입력일과 동일할 수 가 있는지? 뭔소린지?
다 맞다면 OK를 뱉어내는 것을 하나로 구현하고 싶습니다.
==> 둘째주 수요일이랑은 전혀 상관 없는것 같은데요?
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입