안녕하세요
사이트에서 많은 도움받고 있는 눈팅회원입니다.
[질문]
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에서는 오류 없이 정상적으로 컴파일 됩니다.