[운영 종료] TmaxTibero Tech Blog

티맥스티베로 공식 블로그는 https://tmaxtibero.blog/ 로 이전되었습니다.

티맥스티베로 공식 블로그 이전 자세히보기

인터페이스, 연동

[Tibero] DBLINK 우회방안_Oracle to Tibero (1)

TmaxTiberotech 2023. 8. 16. 14:28

Oracle에서 Tibero로의 DBLink 사용 시 제약이 있을 수 있는 사항들에 대해 우회하여 처리할 수

있는 방안을 안내합니다.

Oracle에서 Tibero sequence 값 호출

Oracle to Tibero Link 를 사용한 sequence 호출 시 제약이 있을 경우 아래와 같은 우회 방안을

안내합니다.

1. Tibero 에 sequence 에 대한 function을 생성합니다.

2. 해당 function 을 view 로 생성합니다.

3. Oracle to Tibero Link 시 sequence가 아닌 view 를 호출하여 사용하는 형태로 변형합니다.

-- 테스트 시퀀스 생성

CREATE SEQUENCE SEQ_TEST_0627 --시퀀스이름 EX_SEQ
INCREMENT BY 1 --증감숫자 1
START WITH 1 --시작숫자 1
MINVALUE 1 --최소값 1
MAXVALUE 1000 --최대값 1000
NOCYCLE --순한하지않음
noCACHE;

 

-- 테스트 테이블 생성

CREATE TABLE T2_TIB (SEQ NUMBER, TEXT VARCHAR(20));
INSERT INTO T2_TIB VALUES (SEQ_TEST_0627.NEXTVAL,'테스트');

 

--우회 전 쿼리

SELECT SEQ.NEXTVAL@OT_0627 AS SEQ_TIB,
                          'TEXT' AS TEXT_TIB
FROM DUAL;

 

--우회 후 쿼리
-- 시퀀스 호출 함수 생성

CREATE OR REPLACE FUNCTION SEQ_TEST_0627_FUNC RETURN NUMBER
IS V_NEXTVAL NUMBER;
BEGIN
       SELECT SEQ_TEST_0627.NEXTVAL INTO V_NEXTVAL FROM DUAL;
       RETURN V_NEXTVAL;
END SEQ_TEST_0627_FUNC;

 

-- 함수 호출 VIEW를 생성

CREATE OR REPLACE VIEW SEQ_TEST_0627_VIEW AS
SELECT SEQ_TEST_0627_FUNC AS NEXTVAL FROM DUAL;
 
SELECT
        (SELECT NEXTVAL FROM SEQ_TEST_0627_VIEW@OT_0627) AS SEQ_TIB,
         'TEXT' AS TEXT_TIB
FROM DUAL;

Oracle에서 Tibero update 시 형 변환

Oracle to Tibero Link 를 사용해 Tibero에 형 변환 후 update 시 제약이 있을 경우 아래와 같은 우회 방안을 안내합니다.

 

Note!

본 문서에서는 PL/SQL 형태로 바꾸어 변형된 값을 인자로 받아 수행했습니다.

 
-- 테스트 테이블 생성

CREATE TABLE T3_TIB (DT_CD VARCHAR(20), DT_STAMP VARCHAR(20) ,DT DATE);
INSERT INTO T3_TIB VALUES ('1','20201300', SYSDATE);
INSERT INTO T3_TIB VALUES ('1','20201400', SYSDATE);
INSERT INTO T3_TIB VALUES ('0','20201500', SYSDATE);
INSERT INTO T3_TIB VALUES ('1','20201600', SYSDATE);

 

--우회 전 쿼리

UPDATE T3_TIB@OT_0627
                     SET DT_STAMP = TO_CHAR(SYSDATE,'YYYYMMDD')
                                  ,DT = SYSDATE
                     WHERE DT_CD='1';

 

--우회 후 쿼리

DECLARE
D1 CHAR(8);
D2 DATE;
BEGIN
SELECT TO_CHAR(SYSDATE,'YYYYMMDD') INTO D1 FROM DUAL;
SELECT SYSDATE INTO D2 FROM DUAL;
UPDATE T3_TIB@OT_0627
                          SET DT_STAMP = D1
                                      ,DT = D2
                          WHERE DT_CD='1';
                          COMMIT;
END;
/