수색…


통사론

  • 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;
/


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow