db링크로 프로시저 호출 시 널 변수로 넘기면... 5

by 또드락 [PL/SQL] [2023.02.20 10:48:24]


안녕하세요

항상 검색해서 조언을 구하다가 이렇게 글 올려봅니다.

문의:

 

A DB : 오라클11.2.0.4.0

B DB : 오라클11.1.0.7.0

A DB와 B DB 는 DB링크로 연결되어 있습니다.

그런데 A DB에서 프로시저를 호출하면 문제없이 실행되는데...

B DB에서 A DB프로시저를 호출할 때 변수에 널데이터가 있으면 실행이 안 됩니다.

예를 들어

B DB에 있는 프로시저명이 PROCEDURE1 이라고하면

B DB 에서 EXEC PROCEDURE1(변수1, 변수2, ''); 을 실행하면 문제없이 돌아가는데,

A DB에서 EXEC PROCEDURE1@DBLINK_B(변수1, 변수2, ''); 이렇게 실행하면 처리가 안 되고,

               EXEC PROCEDURE1@DBLINK_B(변수1, 변수2, 변수3); 이렇게 널 없이 실행하면 처리가 됩니다.

 

DB 링크로 걸린 다른DB에 있는 프로시저를 호출할 때 널처리를 따로 해줘야 하는 걸까요?

아니면 널로 넘겨주는 변수문제가 아닌 다른게 있는건지 모르겠습니다.

by 우주민 [2023.02.20 10:57:11]

혹시 owner 가 다르지만 동일한 명칭의 프로시저를 가지고 있지 않은지 확인이 먼저 필요할듯 합니다.

dblink로 연결된 권한으로 접근되는 owner 와 직접 내가 컨트롤하는 onwer 가 다를 경우에는 동일한 명칭이여도 다른 프로시저로 봐야 합니다.


by 또드락 [2023.02.20 11:38:41]

네 동일한 명칭으로된 프로시저는 없구요...

DB링크에 걸린 프로시저를 그대로 가져와서 

처리되는 SELECT, DELETE, INSERT, UPDATE 되는 테이블마다 @DBLINK를 붙여서 실행해서 널변수로 보내면

이건 또 실행이 됩니다... 


by 동동동 [2023.02.20 13:06:04]

B DB 의 procedure 의 파라메터가 어떻게 선언되어 있나요?

디폴트 값을 줘도 마찬가지 일까요??

 

procedure b_procedure(p1 IN VARCHAR2
                     ,p2 IN VARCHAR2
                     ,p3 IN VARCHAR2 DEFAULT NULL) IS

by 또드락 [2023.02.20 13:53:41]
procedure b_procedure(p1 IN table_name.column%type
                     ,p2 IN table_name.column%type
                     ,p3 IN table_name.column%type) IS

이렇게 돼 있었는데,

이것저것 해보다가

procedure b_procedure(p1 IN table_name.column%type

                                       ,p2 IN table_name.column%type

                                       ,p3 IN varcha2 default null) IS

이렇게 해도 증상은 동일합니다.....


by 우주민 [2023.02.20 13:32:23]

음... 그렇다면 이유가 명확하진 않네요.

혹시 모르니 실행시에 OWNER 도 같이 명시해서 실행 테스트 해보심이 좋을거 같습니다.

논리적으로는 동일한 프로시져가 다르게 작동하지는 않을거 같네요.


by 운하찡 [2023.02.22 14:05:57]

혹시 null인 파라미터로 집계함수를 사용하는 부분이 있나요? 디비링크 걸 경우에 null인경우에 집계함수를 사용할경우 에러나는 경우가 있더라구요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입