Oracle 에서 Tibero 로의 DBLink 사용 시 제약이 있을 수 있는 사항들에 대해 우회하여 처리할
수 있는 방안을 안내합니다.
Oracle에서 Tibero Link 사용 시 AND 절의 컬럼 사용
Oracle to Tibero Link 에서 복수개의 AND 절 컬럼 사용 시 제약이 있을 경우 아래와 같은
우회 방안을 안내합니다.
CURSOR에 select 절 전체의 결과를 담아 놓고 그 결과를 이용한 쿼리 수행
-- 테스트 테이블 생성
--티베로
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');
|
-- 오라클
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');
|
-- 우회 전 쿼리
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
)
|
-- 우회 후 쿼리
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;
/
|
Oracle에서 Tibero 함수 호출
Oracle to Tibero Link 를 사용한 Tibero의 함수 호출 시 제약이 있을 경우 아래와 같은 우회
방안을 안내합니다.
Tibero에 Oracle의 컬럼을 select 할 수 있는 view 생성
Note!
Oracle에서 Tibero 의 view 를 조회하면 LINK의 LINK 를 거쳐 결과 값이 나오도록 우회했습니다.
view 생성 시 Tibero는, varchar2의 경우 최대 크기(65536)로 할당되어 오라클 쪽에서 LONG
타입으로 인식됩니다. view 생성 시 CAST 함수로 컬럼 길이를 제한하는 방법으로 우회 가능합니다. |
-- 테스트 함수 생성
CREATE OR REPLACE FUNCTION FN_T5_TEST RETURN NUMBER
IS
V_NUMBER NUMBER;
BEGIN
SELECT FUNC_NO INTO V_NUMBER FROM T1_TIB;
RETURN V_NUMBER;
END;
/
DROP FUNCTION FN_T5_TEST
CREATE OR REPLACE FUNCTION FN_T5_TEST_2 RETURN VARCHAR2
IS
V_TEXT VARCHAR2(20);
BEGIN
SELECT 'ORACLE' INTO V_TEXT FROM DUAL;
RETURN V_TEXT;
END;
/
|
-- 우회 전 쿼리
SELECT FN_T5_TEST AS NUM, FN_T5_TEST_2 AS TEXT FROM DUAL@OT_0627;
|
-- 우회 후 쿼리
CREATE OR REPLACE VIEW VW_T5_TEST AS
SELECT FN_T5_TEST AS NUM , cast(FN_T5_TEST_2 as varchar(20)) AS TEXT FROM DUAL;
select *
from t4_ora
where ORA_TEST_TEXT in (SELECT text FROM VW_T5_TEST@OT_0627);
|
'인터페이스, 연동' 카테고리의 다른 글
[Tibero] ODBC 설치 및 연결 가이드 in Unix (1) (0) | 2023.08.22 |
---|---|
[Tibero] DBLINK 우회방안_Oracle to Tibero (4) (0) | 2023.08.16 |
[Tibero] DBLINK 우회방안_Oracle to Tibero (2) (0) | 2023.08.16 |
[Tibero] DBLINK 우회방안_Oracle to Tibero (1) (0) | 2023.08.16 |
[Tibero] DBLINK 설정_Tibero to PostgreSQL (4) (0) | 2023.07.31 |