[끌어올림&내용추가] 프로시져에서 merge into 사용시 dblink에 대해 문의드립니다. 0 1 5,206

by 시끄러 [SQL Query] 프로시져 머지 링크 procedure merge into DBLink [2013.11.01 15:25:42]


안녕하세요
사이트에서 많은 도움받고 있는 눈팅회원입니다.

[질문]

create or replace procedure 프로시져명(파라미터1, 파라미터2, ~~~) is
begin

Merge into 테이블명1@링크명1 x
using ( select 컬럼1, 컬럼2, ~  from 테이블명2@링크명2) y
on (x.컬럼1 = y.컬럼1)
when matched then
update set ~~
when not matched then
insert ~~~
;

end;

위 프로시져를 컴파일하면
merge into 테이블명@링크명 --> 요라인에서 컴파일 오류가 뜹니다.

에디터창에서 merge 구문만 돌리면 정상적으로 돌아가는데
프로시져로 만들면 오류가 뜨니 원인을 도통 모르겠습니다.

머지구문에 대상이 되는 테이블은 링크명을 사용할수 없나요??
대상테이블에 링크명을 사용할수 없다면 merge구문만 따로 빼서
에디터에서 돌렸을때 에러가 나야함에도 정상 작동합니다. ㅜㅜ

*참고로 첫줄의 링크명1만 제거하고 using 안에 있는 링크명2는 그대로 두고 컴파일하면
정상적으로 컴파일 되며
각각의 dblink는 정상 작동하고 있습니다.


////////////////////////////////////////////////////////////////////////////////
2013-11-01 15:08 추가된 내용입니다.
////////////////////////////////////////////////////////////////////////////////
// 오라클 버전
Oracle Version : 10g Enterprise Edition Release 10.2.4.0 - 64bit

// 프로시져 내용
create or replace procedure 프로시져명(파라미터1, 파라미터2, ~~~) is
begin

Merge into 테이블명1@LK_HQSDDB x
using ( select 컬럼1, 컬럼2, ~ 
             from 테이블명2@LK_HQSDDB a
            inner join 테이블명3 b
            on a.컬럼1 = b.컬럼1) y
on (x.컬럼1 = y.컬럼1 and x.컬럼2 = y.컬럼2)
when matched then
update set ~~
when not matched then
insert ~~~;

end;

// 에러메세지
Error Message1) ~~~ Found '@', Invalid identifier : @
Error Message2) ~~~ Found 'LK_HQSDDB', Expecting : USING

// 위 프로시져내용중
// "Merge into 테이블명1@LK_HQSDDB x" 를
// => "Merge into 테이블명1 x" 로 수정하면 정상적으로 컴파일 됩니다.
// using 안에 있는 링크는 정상 실행됩니다.(LK_HQSDDB는 정상적으로 연결됨)
// 참고로 Oracle Version 10.2.5에서는 오류 없이 정상적으로 컴파일 됩니다.
by 임상준 [2013.11.05 08:55:23]
10.2.0.2 <-> 10.2.0.4 사이에서 동일한 구조의 머지 구문 쓴 프로시저 정상 작동 됩니다
버전 문제는 아닌것 같아 보이고요
권한 문제나 db link 계정 등 확인 해 보라고 덧글 많이 달렸던 것 같은데 확인 해 보셨는지요
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입