수색…
통사론
CREATE [OR REPLACE] 패키지 package_name
[AUTHID {CURRENT_USER | DEFINER}]
{IS | 같이}
[PRAGMA SERIALLY_REUSABLE;]
[collection_type_definition ...]
[record_type_definition ...]
[subtype_definition ...]
[collection_declaration ...]
[constant_declaration ...]
[예외 _ 선언 ...]
[object_declaration ...]
[record_declaration ...]
[variable_declaration ...]
[cursor_spec ...]
[function_spec ...]
[procedure_spec ...]
[call_spec ...]
[PRAGMA RESTRICT_REFERENCES (주장) ...]
END [package_name];
패키지 생성 또는 바꾸기 PackageName IS
함수 FunctionName (매개 변수 1 IN VARCHAR2, 매개 변수 2 IN NUMBER) RETURN VARCHAR2;
끝 PackageName;
CREATE [또는 REPLACE] 패키지 본문 package_name
{IS | 같이}
[PRAGMA SERIALLY_REUSABLE;]
[collection_type_definition ...]
[record_type_definition ...]
[subtype_definition ...]
[collection_declaration ...]
[constant_declaration ...]
[예외 _ 선언 ...]
[object_declaration ...]
[record_declaration ...]
[variable_declaration ...]
[커서 _body ...]
[function_spec ...]
[procedure_spec ...]
[call_spec ...]
END [package_name];
패키지 본디 만들기 또는 바꾸기 PackageName IS
함수 FunctionName (parameter1 IN VARCHAR2, 매개 변수 2 IN NUMBER) RETURN VARCHAR2 IS
선언
시작
실행할 명령문
RETURN varchar2 변수
END FunctionName;
끝 PackageName;
패키지 사용
PLSQL의 패키지는 프로 시저, 함수, 변수, 예외, 상수 및 데이터 구조의 컬렉션입니다. 일반적으로 패키지의 리소스는 서로 관련이 있으며 유사한 작업을 수행합니다.
패키지를 사용해야하는 이유
- 모듈성
- 더 나은 성능 / 기능성
패키지의 일부
사양 - 패키지 헤더라고도합니다. 변수 및 유형 선언과 패키지 외부에서 호출 할 공공있는 패키지에있는 함수와 프로 시저의 서명을 포함합니다.
패키지 본문 - 코드 및 개인 선언이 포함됩니다.
패키지 명세는 패키지 본문 전에 컴파일해야합니다. 그렇지 않으면 패키지 본문 컴파일이 오류를보고합니다.
오버로딩
패키지의 함수 및 프로 시저에 오버로드가 발생할 수 있습니다. 다음 패키지 TEST 에는 호출되는 매개 변수에 따라 다르게 작동하는 print_number 라는 두 개의 프로 시저가 있습니다.
create or replace package TEST is
procedure print_number(p_number in integer);
procedure print_number(p_number in varchar2);
end TEST;
/
create or replace package body TEST is
procedure print_number(p_number in integer) is
begin
dbms_output.put_line('Digit: ' || p_number);
end;
procedure print_number(p_number in varchar2) is
begin
dbms_output.put_line('String: ' || p_number);
end;
end TEST;
/
우리는 두 가지 절차를 모두 호출합니다. 첫 번째는 정수 매개 변수이고 두 번째는 varchar2입니다.
set serveroutput on;
-- call the first procedure
exec test.print_number(3);
-- call the second procedure
exec test.print_number('three');
위의 스크립트의 결과는 다음과 같습니다.
SQL>
Digit: 3
PL/SQL procedure successfully completed
String: three
PL/SQL procedure successfully completed
오버로딩에 대한 제한 사항
로컬 또는 패키지 된 서브 프로그램 또는 유형 메소드 만 오버로드 될 수 있습니다. 따라서 독립형 서브 프로그램에 과부하를 걸 수 없습니다. 또한 형식 매개 변수가 이름 또는 매개 변수 모드에서만 다른 경우 두 개의 서브 프로그램을 오버로드 할 수 없습니다
함수로 패키지 헤더와 본문을 정의하십시오.
이 예제에서 우리는 패키지 헤더와 패키지 몸체를 함수로 정의한다.
그 다음에는 반환 값을 반환하는 함수를 패키지에서 호출합니다.
패키지 헤더 :
CREATE OR REPLACE PACKAGE SkyPkg AS
FUNCTION GetSkyColour(vPlanet IN VARCHAR2)
RETURN VARCHAR2;
END;
/
패키지 몸체 :
CREATE OR REPLACE PACKAGE BODY SkyPkg AS
FUNCTION GetSkyColour(vPlanet IN VARCHAR2)
RETURN VARCHAR2
AS
vColour VARCHAR2(100) := NULL;
BEGIN
IF vPlanet = 'Earth' THEN
vColour := 'Blue';
ELSIF vPlanet = 'Mars' THEN
vColour := 'Red';
END IF;
RETURN vColour;
END;
END;
/
패키지 본문에서 함수 호출 :
DECLARE
vColour VARCHAR2(100);
BEGIN
vColour := SkyPkg.GetSkyColour(vPlanet => 'Earth');
DBMS_OUTPUT.PUT_LINE(vColour);
END;
/