begin for i in (select K.RSVNUM,K.RSVINFO_ID FROM EXPRSVINFO K,EXPRSVSCHE T WHERE 1=1 AND T.EXPMETR_ID = K.EXPMETR_ID -- 키 AND T.RSVDATE = K.RSVDATE -- 키 AND T.RSV_STR_TIME = K.RSV_STR_TIME -- 키 AND T.RSV_END_TIME = K.RSV_END_TIME -- 키 AND RSVSTATE = '5' AND APPLYDATE+3 < sysdate ORDER BY K.RSVDATE ASC ) loop UPDATE EXPRSVSCHE Z SET RSVNUM = RSVNUM - I.RSVNUM WHERE EXISTS (SELECT K.RSVINFO_ID ,K.RSVDATE FROM EXPRSVINFO K WHERE Z.EXPGOOD_ID = K.EXPGOOD_ID AND Z.EXPMETR_ID = K.EXPMETR_ID AND Z.RSVDATE = K.RSVDATE AND Z.RSV_STR_TIME = K.RSV_STR_TIME AND Z.RSV_END_TIME = K.RSV_END_TIME AND K.RSVINFO_ID = I.RSVINFO_ID --예약 pk값 AND K.RSVSTATE = '5' AND K.APPLYDATE+3 < sysdate ); end loop; end;
예약이 3일후 입금확인이 안되면 자동 취소되는 프로시저를 만들었습니다.
그 상태값을 가지고 현재 3일이 지나면 자동취소 되는 인원들을 하나씩
업데이트 쳐주고 싶은데 스케쥴 테이블에 있는 인원에 예약한 인원을 (-)빼서 그 인원이 사라지게 하고싶은데
현재 이렇게 돌리면 순차적으로 삭제되는게 아니라 랜덤으로 4행 삭제가 되버립니다.
예를 들어 20 30 40 50 명 이렇게 인원이 예약되있는데 ㅡ 빼야하는 인원이 4행이 맘대로 빼져서
맞지않습니다.
잘못짠거 같은데..뭔가 해결책이 안떠올라서 문의드립니다.
제가 여기에 처음으로 글을 쓰고 초보라서 많이 부족합니다.EXPGOOD_ID ,EXPMETR,RSVDATE,RSV_STR_TIME,RSV_END_TIME
가 외래키로 기존 설계테이블에 설정되어있고
예약 테이블은 저 5개로 예약을 매칭해서 찾는데
저 밑에있는 예약 테이블 인원을 스케쥴테이블에 차감해서 (-)빼서 업데이트를 쳐줄려고 하는건데.
RSVSTATE = '5' 예약테이블 상태값으로 3일지난 입금확인안된 예약들이 배치돌아서 변경되어지는 값
화면상에 예약인원 20명/정원50명 이 예약하신분이 20명 이라면 입금을 3일동안 안하시면 자동으로 지금 등록된 20명이 0명이되게 현재 예약테이블에
차감해서 업데이트를 하고싶습니다.
BEGIN FOR i IN (SELECT k.rsvinfo_id , k.rsvnum , k.expgood_id , k.expmetr_id , k.rsvdate , k.rsv_str_time , k.rsv_end_time FROM exprsvsche z , exprsvinfo k WHERE k.expgood_id = z.expgood_id AND k.expmetr_id = z.expmetr_id AND k.rsvdate = z.rsvdate AND k.rsv_str_time = z.rsv_str_time AND k.rsv_end_time = z.rsv_end_time AND k.rsvstate = '5' AND k.applydate < sysdate - 3 ) LOOP UPDATE exprsvsche z SET z.rsvnum = z.rsvnum - i.rsvnum WHERE z.expgood_id = i.expgood_id AND z.expmetr_id = i.expmetr_id AND z.rsvdate = i.rsvdate AND z.rsv_str_time = i.rsv_str_time AND z.rsv_end_time = i.rsv_end_time ; END LOOP; END; /
BEGIN FOR i IN (SELECT k.rsvnum , z.ROWID rid FROM exprsvsche z , exprsvinfo k WHERE k.expgood_id = z.expgood_id AND k.expmetr_id = z.expmetr_id AND k.rsvdate = z.rsvdate AND k.rsv_str_time = z.rsv_str_time AND k.rsv_end_time = z.rsv_end_time AND k.rsvstate = '5' AND k.applydate < sysdate - 3 ) LOOP UPDATE exprsvsche z SET z.rsvnum = z.rsvnum - i.rsvnum WHERE z.ROWID = i.rid ; END LOOP; END; /