개요
Oracle에서 Tibero로의 DBLink에서 다수의 AND절 컬럼 사용 시 제약이 있을 경우 아래와 같은 우회 방안을 안내합니다.
방법
커서에 select 절 전체 결과를 포함해 그 결과를 이용하여 쿼리를 수행합니다.
테스트 테이블 생성
Tibero
CREATE TABLE T4_TIB (TEST_NO NUMBER, TEST_TEXT VARCHAR(20), UPD_CD VARCHAR(2));
INSERT INTO T4_TIB VALUES (1,’ORACLE’,’N’);
INSERT INTO T4_TIB VALUES (2,’ORACLE’,’N’);
INSERT INTO T4_TIB VALUES (3,’ORACLE’,’N’);
INSERT INTO T4_TIB VALUES (4,’ORACLE’,’N’);
SQL
복사
Oracle
CREATE TABLE T4_ORA (CD CHAR, ORA_TEST_NO NUMBER, ORA_TEST_TEXT VARCHAR(20));
INSERT INTO T4_ORA VALUES (‘A’,1,’ORACLE’);
INSERT INTO T4_ORA VALUES (‘A’,2,’ORACLE’);
INSERT INTO T4_ORA VALUES (‘A’,3,’ORACLE’);
INSERT INTO T4_ORA VALUES (‘A’,4,’ORACLE’);
CREATE TABLE T4_ORA_2 (CD_2 CHAR, ORA_TEST_NO_2 NUMBER, ORA_TEST_TEXT_2 VARCHAR(20));
INSERT INTO T4_ORA_2 VALUES (‘A’,1,’ORACLE’);
INSERT INTO T4_ORA_2 VALUES (‘A’,2,’ORACLE’);
INSERT INTO T4_ORA_2 VALUES (‘B’,3,’ORACLE’);
INSERT INTO T4_ORA_2 VALUES (‘B’,4,’ORACLE’);
SQL
복사
우회 전 쿼리
UPDATE T4_TIB@OT_0627 T
SET UPD_CD = ‘Y’
WHERE 1=1
AND (T.TEST_NO, T.TEST_TEXT,T.UPD_CD)
IN (
SELECT A.ORA_TEST_NO
,A.ORA_TEST_TEXT
,’N’ UPD_CD
FROM T4_ORA A,
T4_ORA_2 B
WHERE A.CD = B.CD_2
)
SQL
복사
우회 후 쿼리
DECLARE
CURSOR B_CUR IS ( SELECT distinct A.ORA_TEST_NO
,A.ORA_TEST_TEXT
,’N’ UPD_CD
FROM T4_ORA A,
T4_ORA_2 B
WHERE A.CD=B.CD_2
);
BEGIN
FOR C_CUR IN B_CUR
LOOP
UPDATE T4_TIB@OT_0627 T
SET UPD_CD = ‘Y’
WHERE TEST_NO = C_CUR.ORA_TEST_NO
AND TEST_TEXT = C_CUR.ORA_TEST_TEXT
AND UPD_CD = C_CUR.UPD_CD;
COMMIT;
END LOOP;
END;
/
SQL
복사