분산쿼리(Openquery) 실사용 예 > db

본문 바로가기
사이트 내 전체검색

db

분산쿼리(Openquery) 실사용 예

페이지 정보

작성자 서방님 댓글 0건 조회 166회 작성일 06-11-10 13:46

본문

SQL SERVER에서 ORACLE 서버로 분산쿼리(Openquery)를 이용해서 데이터를 조회,수정,삭제

가능합니다. Openquery는 fourpartname을 사용하는것 보다 속도가 더 빠릅니다.

 

Openquery 사용 예

1.openquery 내의 조건절에 직접 cwsonic을 입력하면 OK

 -- 조회

select * from openquery(orainsa, 'select * from tgt_code where code_no=''cwsonic''')  

-- insert

insert openquery (orainsa, 'select * from tgt_code where 1=0')

values ('wonsick','',' ','')

-- delete

delete openquery(orainsa, 'select rowid from tgt_code where id=''wonsick''')

1번과 같은 경우는 분산쿼리 내부에 상수를 사용하는 것으로 정상적으로 작동이 가능

 

2.openquery 밖의 조건절에서 상수값을 변수로 받아 처리하면 OK

declare @codeno   varchar(50)      

set @codeno ='wonsick'

delete openquery(orainsa, 'select id from cwsonic')

where id=@codeno

2번과 같은 경우도 조건절에 변수를 사용했지만 분산쿼리 바깥단에서 썼기때문에

정상적으로 조회가 됩니다.(단, Table Full Scan 되기 때문에 이런 방식은 사용을 지양해야 합니다.)

 

3.openquery 내의 조건절에 상수값을 변수로 처리하면 ERROR 발생

declare @HullNo char(6)

set @HullNo='001553'

select * from openquery(STEELS, 'select * from TATB_GSCAD_IF_ELE_BASIC where HULL_NO=@HullNo')       ERROR

조회결과 ---> 오류가 발생

    Server: Msg 7321, Level 16, State 2, Line 1

    OLE DB 공급자 'MSDAORA'에 대해 실행할 쿼리를 준비하는 중 오류가 발생했습니다.

    OLE DB 오류 추적 [OLE/DB Provider 'MSDAORA' ICommandPrepare::

    Prepare returned 0x80040e14].

3번과 같은 경우는 분산쿼리 안에 변수를 사용해서 오라클에서 인식을 하지 못해

나오는 error로 SQL문을 변수STRING으로 받아서 실행하면 가능합니다.

declare @HullNo char(6)
declare @strQuery varchar(1024)
set @HullNo='001553'

set @strQuery = 'select * from openquery(STEELS, '''
                        + ' select id from TATB_GSCAD_IF_ELE_BASIC

                            where HULL_NO='''
                        + @HullNo +'''' + ''')'

exec (@strQuery)

가능하면 3번과 같이 STRING으로 받아 처리하는 것을 추천합니다.

댓글목록

등록된 댓글이 없습니다.

Total 464건 27 페이지
게시물 검색

회원로그인

접속자집계

오늘
29
어제
302
최대
1,347
전체
155,090
Latest Crypto Fear & Greed Index

그누보드5
Copyright © 서방님.kr All rights reserved.