2011-08-31 2 views
4

오라클에 패키지를 정의 할 때 헤더와 유사하고 본문이 있습니다.오라클 패키지에 기본값을 정의 할 곳

두 위치에서 모든 매개 변수를 정의해야합니다. 호출 프로그램 (IBM 메시지 중개자)에 대해 매개 변수 중 하나를 선택적으로 만들고 싶습니다. 머리글과 본문 정의에 기본값을 추가해야합니까?

Addionally, messagebroker가 기본값을 가진 매개 변수의 값을 지정하지 않고 proc를 호출 할 수 있는지 확인하십시오.

감사합니다.

업데이트 : 본문이 아닌 머리글에 기본값을 추가 할 수 있으며 두 가지 모두에 추가 할 수 있습니다. 나는 그것을 단지 몸에 넣을 수는 없다.

두 헤더를 헤더에 추가하는 것과 헤더를 추가하는 것 사이의 차이점은 무엇입니까?

업데이트 :

나는 단지 사양에 기본이 아닌 몸을 지정 어디이 작업을 수행 할 수 있습니다. 또는 두 위치 모두에서 기본값을 지정할 수도 있습니다. 차이점은 무엇입니까?

create or replace 
package myPackage is 
PROCEDURE myProc (
    parm1 IN varchar2,       
    parm1 IN date,      
    parm1 IN number default null 
); 
end myPackage; 

create or replace 
package body myPackage is 
PROCEDURE myProc (
    parm1 IN varchar2,       
    parm1 IN date,      
    parm1 IN number 
) is 
... 
... 
... 
end myProc; 
end myPackage; 
+0

TSQL은 Microsoft에만 해당됩니다. 해당 태그를 수정할 수도 있습니다. – Paparazzi

+0

아, 맞아. 나는 희망찬 생각 이었음에 틀림 없어. :) – kralco626

답변

5

매개 변수를 선택적으로 설정하려면 기본값을 지정해야합니다. 본문 선언에없는 경우 기본값이 제대로 작동하면 놀라실 것입니다.

문제점을 피하기 위해 모든 패키지 사양 선언을 패키지 본문 선언의 정확한 복사본으로 만드는 습관을 들었습니다.

편집 :

영업 이익은 지적 하듯이, 그것은 단지 사양에있을 수 있으며 작동합니다. 그것은 사양, 오류가 발생 본문에의 아닌 경우

SQL> CREATE OR REPLACE PACKAGE p AS 
    2 PROCEDURE prc(p1 VARCHAR2, p2 VARCHAR2); 
    3 END; 
    4/

Package created 
SQL> CREATE OR REPLACE PACKAGE BODY p AS 
    2 PROCEDURE prc(p1 VARCHAR2 DEFAULT 'P1', p2 VARCHAR2) 
    3 IS 
    4 BEGIN 
    5 dbms_output.put_line(p1||','||p2); 
    6 END; 
    7 END; 
    8/

Warning: Package body created with compilation errors 
SQL> 

하지만 사양의 경우에만, 모든 작품 :

SQL> CREATE OR REPLACE PACKAGE p AS 
    2 PROCEDURE prc(p1 VARCHAR2 DEFAULT 'P1Dflt', p2 VARCHAR2); 
    3 END; 
    4/

Package created 
SQL> CREATE OR REPLACE PACKAGE BODY p AS 
    2 PROCEDURE prc(p1 VARCHAR2, p2 VARCHAR2) 
    3 IS 
    4 BEGIN 
    5 dbms_output.put_line(p1||','||p2); 
    6 END; 
    7 END; 
    8/

Package body created 
SQL> DECLARE 
    2 BEGIN 
    3 p.prc(p2=>'Test'); 
    4 END; 
    5/

P1Dflt,Test 

PL/SQL procedure successfully completed 

SQL> 

말했다 즉,에 대한 질문의 답 무엇 차이점은 스펙에 기본값을 두거나 두 위치 모두에 기본값을 두는 것 사이에는 차이가 없다는 것입니다. 최종 결과는 같습니다. 나는 당신이 다큐멘터리 목적으로 두 곳 모두에 넣어야한다는 나의 믿음을 되풀이합니다.

+0

suprise! 롤. 당신은 definatly spec에서 그리고 신체에서 아닙니다 디폴트를 가질 수 있습니다. 누구도 그 차이점이 무엇인지 알고 있으며 두 곳 모두에서 차이점을 알고 있습니까? – kralco626

+0

외관상으로는, 그들은 spec에서이어야하고, 몸에서 선택이어야한다. – DCookie

+0

. 내 질문은, 그것은 차이가 있습니까? – kralco626

1

패키지에는 spec 또는 본문에 기본 변수/상수를 포함 할 수 있습니다. 개인적으로 나는 몸에서 그 (것)들을 끼워 넣는다 나는 나가 진짜로 무슨 일이 일어나고 있는지 명세를 볼 필요 없다; 나는 공식 오라클이 나와 동의하지 않는다는 것을 알고있다. 본문에서 이것은 바로 아래에 있어야합니다 create or replace

당신이 당신의 패키지의 함수/프로 시저에 이것을 전달하고 있음을 암시하지만, 나는 당신이 word 매개 변수를 사용함에 약간 혼란 스럽습니다. 패키지 명세 또는 본문에 전역 변수가 설정되어있는 경우 아무 데나 전달할 필요가 없습니다. 당신이 글로벌을 바꾸고 있다면, 엉망진창을 물색하고 있거나 수년 내에 당신을 따르는 사람에게 선물을 줄 것입니다.

하나의 함수/프로 시저에만 사용하는 경우 선언에서 해당 특정 요소를 설정하십시오.

This 도움이 될 것입니다.

+0

몸체의 매개 변수에 기본값을 할당 할 수는 없지만 ... – kralco626

+0

내 업데이트로 명확히하는 데 도움이됩니다 – kralco626

+0

아, 그 경우 @DCookie가 맞습니다. 자신에게 많은 어려움을 덜어주기 위해이 두 가지를 넣으십시오. – Ben

관련 문제