ORACLE TO MSSQL I/F 데이터 전송 관련 건 0 0 4,157

by 냥냥펀치원투 ORACLE 인터페이스 I/F [2023.12.16 02:19:34]


안녕하세요. 냥냥펀치원투 입니다.

이번에 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의 멀티 트랜잭션 오류가 발생 됩니다.

고수님들의 고견을 여줍고 싶습니다. 

감사합니다.

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입