Oracle 에서 Tibero 로의 DBLink 사용 시 제약이 있을 수 있는 사항들에 대해 우회하여 처리할
수 있는 방안을 안내합니다.
Oracle에서 Tibero로 insert 시 select 절 sysdate 함수 사용
Oracle to Tibero Link 를 사용한 insert ~ select 수행에서 insert 테이블은 Tibero, select
테이블은 Oracle 에 있을 경우와 select 문에 sysdate 함수를 사용 할 경우 제약이 있을 시
아래와 같은 우회 방안을 안내합니다.
Note!
쿼리 전체를 LINK에 적용해 remote에서 수행할 수 있는 기능을 가진
Oracle 의 DBMS_HS_PASSTHROUGH 패키지를 사용했습니다.
|
1. 쿼리 전체를 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);
|
--우회 전 쿼리
INSERT INTO T3_TIB@OT_0627
(
LAST_MOD_TS
)
(
SELECT
SYSDATE AS LAST_MOD_TS
FROM T3_ORA
WHERE
);
|
--우회 후 쿼리
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;
/
|
2. DBMS_HS_PASSTHROUGH 사용방안 2
-- 테스트 테이블 생성
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;
/
|
'인터페이스, 연동' 카테고리의 다른 글
[Tibero] DBLINK 우회방안_Oracle to Tibero (4) (0) | 2023.08.16 |
---|---|
[Tibero] DBLINK 우회방안_Oracle to Tibero (3) (0) | 2023.08.16 |
[Tibero] DBLINK 우회방안_Oracle to Tibero (1) (0) | 2023.08.16 |
[Tibero] DBLINK 설정_Tibero to PostgreSQL (4) (0) | 2023.07.31 |
[Tibero] DBLINK 설정_Tibero to PostgreSQL (3) (0) | 2023.07.31 |