기술 정보
home
채널 소개
home

DBLINK 우회 방안 (insert 시 select sysdate 함수 사용)

문서 유형
기술 정보
분야
인터페이스/연동
키워드
dblink
insert
sysdate
select
1 more property

개요

Oracle에서 Tibero로의 DBLink를 사용해 insert, select 수행 시 제약이 있을 경우 적용할 수 있는 우회 방안을 안내합니다.
insert 테이블은 Tibero, select 테이블은 Oracle 에 존재하는 경우
select 문에 sysdate 함수를 사용할 경우
참고
본 문서에서는 쿼리 전체를 LINK에 적용해 remote에서 수행할 수 있는 기능을 가진 Oracle 의 DBMS_HS_PASSTHROUGH 패키지를 사용했습니다.

방법

Insert 수행 (Tibero to Oracle LINK 사용)

쿼리 전체를 Tibero로 옮긴 후 Tibero to Oracle link를 사용해 insert를 수행합니다.

테스트 테이블 생성

DROP TABLE T3_TIB; CREATE TABLE T3_TIB (LAST_MOD_TS DATE); DROP TABLE T3_ORA; CREATE TABLE T3_ORA (TM_STMP DATE); INSERT INTO T3_ORA VALUES (SYSDATE); INSERT INTO T3_ORA VALUES (SYSDATE); INSERT INTO T3_ORA VALUES (SYSDATE); INSERT INTO T3_ORA VALUES (SYSDATE);
SQL
복사

우회 전 쿼리

INSERT INTO T3_TIB@OT_0627 ( LAST_MOD_TS ) ( SELECT SYSDATE AS LAST_MOD_TS FROM T3_ORA WHERE );
SQL
복사

우회 후 쿼리

DECLARE C CHAR; NR CHAR; BEGIN C := DBMS_HS_PASSTHROUGH.OPEN_CURSOR@OT_0627; DBMS_HS_PASSTHROUGH.PARSE@OT_0627(C,INSERT INTO T3_TIB ( LAST_MOD_TS ) (SELECT SYSDATE AS LAST_MOD_TS FROM T3_ORA@TO_0627 WHERE TO_CHAR(TM_STMP,”YYYYMMDD”)>20200627)); NR := DBMS_HS_PASSTHROUGH.EXECUTE_NON_QUERY@OT_0627(C); DBMS_OUTPUT.PUT_LINE(NR||ROW INSERTED.); DBMS_HS_PASSTHROUGH.CLOSE_CURSOR@OT_0627(C); commit; END; /
SQL
복사

DBMS_HS_PASSTHROUGH 사용방안

--테스트테이블 생성-- CREATE TABLE T3_TIB (CD CHAR(1) , CD_NO NUMBER , TEST_TEXT VARCHAR(20)); INSERT INTO T3_TIB VALUES (‘A’,1,’ORACLE’); INSERT INTO T3_TIB VALUES (‘A’,2,’ORACLE’); INSERT INTO T3_TIB VALUES (‘A’,3,’ORACLE’); INSERT INTO T3_TIB VALUES (‘B’,4,’ORACLE’); INSERT INTO T3_TIB VALUES (‘C’,5,’ORACLE’); CREATE TABLE T3_ORA (ORA_CD CHAR(1) , ORA_CD_NO NUMBER); INSERT INTO T3_ORA VALUES (‘A’,1); INSERT INTO T3_ORA VALUES (‘A’,1); INSERT INTO T3_ORA VALUES (‘B’,2); INSERT INTO T3_ORA VALUES (‘B’,3); INSERT INTO T3_ORA VALUES (‘C’,1); DECLARE C CHAR; NR CHAR; BEGIN C := DBMS_HS_PASSTHROUGH.OPEN_CURSOR@OT_0627; DBMS_HS_PASSTHROUGH.PARSE@OT_0627(C,UPDATE T3_TIB T SET T.TEST_TEXT=”TIBERO” WHERE (T.CD, T.CD_NO) IN (SELECT * FROM T3_ORA@TO_0627 WHERE ORA_CD=”A” AND ORA_CD_NO < 3)); NR := DBMS_HS_PASSTHROUGH.EXECUTE_NON_QUERY@OT_0627(C); DBMS_OUTPUT.PUT_LINE(NR||ROW UPDATE.); DBMS_HS_PASSTHROUGH.CLOSE_CURSOR@OT_0627(C); commit; END; /
SQL
복사