프로시져에서 merge into 사용시 dblink에 대해 문의드립니다. 0 5 3,273

by 시끄러 [SQL Query] 프로시져 머지 링크 procedure merge into DBLink [2013.10.31 18:20:05]


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

[질문]

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.10.31 18:49:48]
무슨 오류 뜨나요?

by 시끄러 [2013.10.31 18:59:47]
링크명1이 잘못됐다고 뜨는것 같습니다.
정확한 메세지는 미쳐 확인하지 못했네요..
개발환경 구축이 어려워 운영DB에 붙어서 확인해야 하는데...지금 접속이 어렵습니다 ㅡㅡ;

by 마농 [2013.11.01 08:32:38]
해당 디비링크의 권한을 확인해 보세요.

by 강서꽃미남 [2013.11.01 08:39:05]
권한, 디비링크 존재 유무 ( 개발 후 삭제도 많이 있습니다.), 디비링크의 TNS 정보 확인

by 시끄러 [2013.11.01 15:16:25]
에러내용 추가했습니다.
고수님들 다시 한번 도움 부탁드립니다 (_ _);;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입