MS-SQL에서 Oracle에 있는 Data에 접근하기 위한 방법으로 Openquery라는걸 소개한 적이 있죠.
기본적으로 제공하는 기능이라 좋긴 하지만 동적으로 쿼리를 만들어서 결과값을 받아올수 없다는 얘기를 한 적이 있습니다. 그렇게 되면 WHERE절 조건을 정확하게 줄 수 없으니 오라클 DB에 부하를 많이 주게 되겠죠.
저도 이렇게 알고 서비스 중인 MS-SQL과 Oracle 사이에 Data 동기화 프로시져를 만들었었습니다.
그런데....

 웬걸...

 회사에서 사용중인 MS-SQL 2005에서 혹시나 하는 마음에 문자열 변수에 커서를 정의하는 문장까지 포함해서 동적으로 쿼리를 만들어 주고, 커서를 열었더니... 결과 값이 정상적으로 나오네요. 앗싸~ 가오리~

아래와 같은 방식으로 처리하니까 동적으로 쿼리문장을 만들어서 실행시키고 결과값을 커서에 받아서 사용할 수 있습니다.


DECLARE @QUERY_STRING VARCHAR(1000)
DECLARE @CODE        VARCHAR(30)
SET @CODE='SUPERCODE'
DECLARE @USERNAME VARCHAR(50)

SET @QUERY_STRING = 'DECLARE ORA_CUR CURSOR FOR
                     SELECT USERNAME
                         FROM OPENQUERY(ORA_DB, ''SELECT USERNAME
                                FROM USER_INFO
                               WHERE CODE='''''+@CODE+''''' AND USER_FLAG=''''N'''' '') '

EXEC (@QUERY_STRING)
OPEN ORA_CUR
FETCH NEXT FROM ORA_CUR INTO @USERNAME

WHILE @@FETCH_STATUS = 0
    BEGIN
    INSERT INTO dbo.USER_INFO(USERNAME)
    VALUES(@USERNAME)

    FETCH NEXT FROM ORA_CUR INTO @USERNAME
  END;

CLOSE ORA_CUR

DEALLOCATE ORA_CUR

YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST


 OracleBase라는 웹 사이트에 올라와있는 Oracle 9i Streams 구현 관련 문서입니다.
요즘 10g와 9i 사이에 Oracle Streams로 Data 공유하는 기능을 구현하는 중이라서 이곳 저곳 뒤지고 있는 중입니다.

원문 : ORACLE-BASE - Oracle9i Streams

 영문으로 되어있다는 점만 빼면 좋습니다. ^^;
9i랑 10g랑은 서로 좀 틀려서 그런지 설정하는게 만만치 않군요.
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST