오라클 패키지에서 기본값을 정의할 위치
오라클에서 패키지를 정의할 때 헤더와 본문이 있습니다.
두 위치 모두에서 모든 매개변수를 정의해야 합니다.호출 프로그램(IBM Message Broker)에 대한 매개 변수 중 하나를 선택적으로 만들고 싶습니다.헤더와 본문 정의 모두에 기본값을 추가해야 합니까?
또한 메시지 브로커가 기본값으로 매개 변수에 대한 값을 지정하지 않고 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;
매개 변수를 선택적으로 설정하려면 기본값을 지정해야 합니다.기본값이 신체 신고에 없다면 저는 그것이 제대로 작동한다면 놀랄 것입니다.
저는 문제를 피하기 위해 모든 패키지 사양 선언을 패키지 본문 선언의 정확한 복사본으로 만드는 습관이 생겼습니다.
편집:
OP가 지적했듯이, 그것은 오직 스펙 안에만 있을 수 있고 작동합니다.본문에는 있지만 사양에는 없는 경우 다음과 같은 오류가 발생:
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>
즉, 어떤 차이가 있는지에 대한 질문에 대한 대답은 기본값을 규격에만 넣거나 두 곳 모두에 넣는 것과 차이가 없는 것으로 보입니다. 최종 결과는 동일합니다.저는 당신이 그것을 두 곳 모두에 기록용으로 넣어야 한다는 저의 믿음을 다시 한번 강조하고 싶습니다.
패키지에는 규격 또는 본문에 기본 변수/상수를 포함할 수 있습니다.개인적으로 저는 그것들을 몸에 넣었습니다. 왜냐하면 저는 무슨 일이 일어나고 있는지 알아내기 위해 사양을 볼 필요가 없기 때문입니다. 공식 Oracle이 제 의견에 동의하지 않는다는 것을 알고 있습니다.몸에서 이것은 바로 아래로 와야 합니다.create or replace
패키지의 함수/프로시저에 매개 변수를 전달하는 것을 의미하지만 매개 변수라는 단어를 사용하는 것에 대해 약간 혼란스럽습니다.패키지 사양 또는 본문에 글로벌 변수가 설정되어 있으면 이 변수를 다른 곳으로 전달할 필요가 전혀 없습니다.만약 당신이 글로벌을 바꾸고 있다면, 당신은 엉망진창인 것을 요구하거나 수년 내에 당신을 따르는 사람에게 그것을 줄 것입니다.
하나의 기능/프로시저에만 사용하는 경우 선언에서 해당 요소로 설정합니다.
이것이 도움이 될 것입니다.
언급URL : https://stackoverflow.com/questions/7260634/where-to-define-default-value-in-oracle-package
'itsource' 카테고리의 다른 글
inject()는 주입 컨텍스트에서 호출되어야 합니다. (0) | 2023.08.10 |
---|---|
도커 리포지토리 이름을 변경하거나 이미지 이름을 변경하는 방법은 무엇입니까? (0) | 2023.08.10 |
Android: ScrollView 내부의 View가 보이는지 확인하는 방법은 무엇입니까? (0) | 2023.08.10 |
기본 키에 대한 SQL 데이터 유형 - SQL 서버? (0) | 2023.08.10 |
기본 키를 사용하여 행을 업데이트할 때 MariaDB 고정 (0) | 2023.08.10 |