안녕하세요. 냥냥펀치원투 입니다.
이번에 I/F쪽 개발을 하게 되었습니다. 이기종DB의 서로 다른 테이블에 데이터를 인터페이스 시키는 작업을 혼자 진행하게 되었습니다.
아래와 같이 설계와 시나리오를 생각하여 진행 하고 있습니다.
TBL
A_HEADER (HEADER_ID, HEADER_NO, DATE)
A_LINE (HEADER_ID, LINE_ID, ITEM, QTY)
SEND_TBL_A (IF_NO, IF_SEQ, HEADER_ID, HEADER_NO, DATE, LINE_ID, ITEM, QTY, CUD_FLAG, APP_FLAG)
IF_HIS (IF_NO, RUN_STATUS = (W,R,S,F), START_TIME, END_TIME
INSERT
1. A_LINE 테이블에 LINE_ID자료가 등록시 SEND_TBL_A 테이블에 IF_NO, IF_SEQ 컬럼의 제외한 데이터를 삽입한다. CUD_FLAG='C', APP_FLAG='N'
2. LINE_ID자료가 등록시 SEND_TBL_A에 LINE_ID의 HEADER_NO의 MAX값을 가지고 와서 MAX값의 APP_FLAG가 'Y' 이면 RASE_ERROR를 띄운다.
UPDATE - 없음
DELETE
LINE_ID자료가 삭제시 SEND_TBL_A에 LINE_ID의 HEADER_NO의 MAX값을 가지고 와서 MAX값의 APP_FLAG가 'Y' 이면 CUD_TYPE을 ='D', APP_FLAG = ''N' 업데이트한다.
만약 CUD_TYPE = 'C',APP_FLAG가 ='N'이면 삭제한다.
전송
1. IF_SP_G.FR_ORACLE_TO_MSSQL_TBL_A_GEN을 실행하여 특정 그룹별( HEADER_ID, LINE_ID)로 IF_NO와 IF_SEQ를 부여하고 IF_HIS 테이블에 IF_NO와 RUN_STATUS = 'W'로 업데이트 하고 START_TIME, END_TIME는 공란으로 한다.
2. 특정시간이 되면 IF_HIS에 'W'이고 IF_NO을 조회한다.
3. IF_HIS 테이블에 조회된 IF_NO의 START_DATE을 현재시간으로 업데이트하고
SEND_TBL_A FOR LOOP로 해당 IF_NO의 대상을 SEND_TBL_A@MSSQL 로 INSERT한다.
4.전송이 끝나면 IF_NO의 END_DATE을 현재시간으로 업데이트하고 SEND_TBL_A의 APP_FLAG = 'Y'로 업데이트한다.
여기서 문제가 되는 부분이
1. LINE 테이블과 SEND_TBL_A를 1=1로 구조를 매칭하고 INSERT, DELETE를 어떻게 해야 될지 모르겠습니다. 위처럼 하면 될까요?
2. IF_HIS 테이블에 여러 SP를 등록해서 제어 하고 싶은데 이렇게 해도 될까요?
3. "SEND_TBL_A FOR LOOP로 해당 IF_NO의 대상을 SEND_TBL_A@MSSQL 로 INSERT한다." 이때 DBLINK의 멀티 트랜잭션 오류가 발생 됩니다.
고수님들의 고견을 여줍고 싶습니다.
감사합니다.