안녕하세요. 오랜만에 업무 관련 질문을 드립니다.
제가 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;