2011-01-04 3 views
0

oracle에서 저장 프로 시저를 호출 할 때 매개 변수 유형의 순서가 중요합니까? Oracle 저장 프로 시저 ... IN 매개 변수 앞에 OUT 매개 변수를 넣는 데 문제가 있습니까?

예를 들어 (다시 특정 구문을 용서하십시오) 우리는 위의 같은 작업을 수행 할 때 우리가 밖으로 OUT 매개 변수에 전달 된 값을 가져

my_proc (
param_a IN NUMBER 
, param_b IN STRING 
, param_c OUT NUMBER 
, param_d OUT STRING 
) begin 
param_c = param_a 
param_d = param_b 
end 

(구문 오류를 용서하십시오). 우리가 param_b 이상 param_c 이동할 때

그러나, 우리는 대신에 전달 된 값의 0.0 NULL을 얻을. 우리는 PL/SQL이를 테스트

my_proc (
param_a IN NUMBER 
, param_c OUT NUMBER 
, param_b IN STRING 
, param_d OUT STRING 
) begin 
param_c = param_a 
param_d = param_b 
end 

.

우리가 간과 할 것이 있습니까?

감사 BayouBob는

답변

0

감사합니다,하지만 좀 간단하게 뭔가를 밝혀. ojdbc6을 통해 저장 프로 시저라고 부르는 방식이 큰 차이를 만듭니다.

이것은 원래 PL/SQL에서 확인하려고했던 java/oracle 질문이었습니다.

'my_proc (...)'호출로 저장 프로 시저를 호출하면 IN 및 OUT 매개 변수의 순서가 중요해 보입니다. 반면 'begin my_proc (...) end'는 잘 작동합니다.

주 : 이는 Java 6에서 ojdbc6을 사용하여 callablestatement를 작성하는 경우에 적용됩니다.

+0

명명 된 매개 변수 또는 위치 매개 변수를 사용하고 있습니까? 네임드는 때로는 예상대로 처리되지 않고 위치 적으로 취급되기 때문에 본 내용을 설명 할 수 있습니다. –

+0

우리는 연결해야하는 데이터베이스를 제공하는 클라이언트의 변덕에서 벗어나기 위해 위치에서 이름 붙은 것으로 전환하고 있습니다. –

0

당신은 당신이 원하는 순서대로 IN/OUT 매개 변수를 정의 할 수 있습니다. 이 절차를 어떻게 부르시겠습니까? 빈 문자열을 전달하면 NULL 출력 값을 얻게됩니다. 예를 들어 :

declare 
    param_c NUMBER; 
    param_d VARCHAR2(100); 
begin 

    my_proc (
    0, 
    param_c, 
    '', 
    param_d 
); 

    dbms_output.put_line(param_c); 

    dbms_output.put_line(nvl(param_d, 'null')); 

end; 

이 정상적으로 출력이 고려 모든 사람에게

0 
null 
관련 문제