Szukaj…


Składnia

  • UTWÓRZ [LUB WYMIEŃ] PAKIET nazwa_pakietu

    [AUTHID {CURRENT_USER | DEFINER}]

    {IS | TAK JAK}

    [PRAGMA SERIALLY_REUSABLE;]

    [collection_type_definition ...]

    [record_type_definition ...]

    [subtype_definition ...]

    [kolekcja_deklaracja ...]

    [stała_deklaracja ...]

    [wyjątek_deklaracja ...]

    [deklaracja_obiektu ...]

    [record_declaration ...]

    [zmienna_deklaracja ...]

    [kursor_spec ...]

    [function_spec ...]

    [procedure_spec ...]

    [call_spec ...]

    [PRAGMA RESTRICT_REFERENCES (asercje) ...]

    END [nazwa_pakietu];

  • TWORZENIE LUB WYMIANA PAKIETU Nazwa pakietu JEST

    FUNKCJA Nazwa funkcji (parametr 1 W VARCHAR2, parametr 2 W LICZBIE) RETURN VARCHAR2;

    END nazwa_pakietu;

  • UTWÓRZ [LUB WYMIENIJ] CIAŁO PAKIETU nazwa_pakietu

    {IS | TAK JAK}

    [PRAGMA SERIALLY_REUSABLE;]

    [collection_type_definition ...]

    [record_type_definition ...]

    [subtype_definition ...]

    [kolekcja_deklaracja ...]

    [stała_deklaracja ...]

    [wyjątek_deklaracja ...]

    [deklaracja_obiektu ...]

    [record_declaration ...]

    [zmienna_deklaracja ...]

    [kursor_body ...]

    [function_spec ...]

    [procedure_spec ...]

    [call_spec ...]

    END [nazwa_pakietu];

  • TWORZENIE LUB WYMIANA NADWOZIA PAKIETU Nazwa pakietu JEST

    FUNKCJA Nazwa funkcji (parametr 1 W VARCHAR2, parametr 2 W LICZBIE) RETURN VARCHAR2 IS

    deklaracje

    ZACZYNAĆ

    instrukcje do wykonania

    POWRÓT zmienna varchar2

    END FunctionName;

    END nazwa_pakietu;

Wykorzystanie pakietu

Pakiety w PLSQL to zbiór procedur, funkcji, zmiennych, wyjątków, stałych i struktur danych. Zasadniczo zasoby w pakiecie są ze sobą powiązane i wykonują podobne zadania.

Dlaczego warto korzystać z pakietów

  • Modułowość
  • Lepsza wydajność / funkcjonalność

Części pakietu

Specyfikacja - czasami nazywana nagłówkiem pakietu. Zawiera deklaracje zmiennych i typów oraz podpisy funkcji i procedur znajdujących się w pakiecie, które są publicznie wywoływane spoza pakietu.

Body Package - Zawiera kod i prywatne deklaracje.

Specyfikacja pakietu musi zostać skompilowana przed treścią pakietu, w przeciwnym razie kompilacja treści pakietu zgłosi błąd.

Przeciążenie

Funkcje i procedury w pakietach mogą być przeciążone. Poniższy pakiet TEST ma dwie procedury o nazwie print_number , które zachowują się inaczej w zależności od parametrów, z którymi są wywoływane.

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

Nazywamy obie procedury. Pierwszy z parametrem liczby całkowitej, drugi z varchar2.

set serveroutput on;
-- call the first procedure
exec test.print_number(3);
-- call the second procedure
exec test.print_number('three');

Dane wyjściowe powyższego skryptu to:

SQL> 
Digit: 3
PL/SQL procedure successfully completed
String: three
PL/SQL procedure successfully completed

Ograniczenia przeciążenia

Przeciążone mogą być tylko lokalne lub pakowane podprogramy lub metody typów. Dlatego nie można przeciążać samodzielnych podprogramów. Nie można również przeciążać dwóch podprogramów, jeśli ich parametry formalne różnią się tylko trybem nazwy lub parametru

Zdefiniuj nagłówek i treść pakietu za pomocą funkcji.

W tym przykładzie definiujemy nagłówek pakietu i treść pakietu wraz z funkcją.
Następnie wywołujemy funkcję z pakietu, która zwraca wartość zwracaną.

Nagłówek pakietu :

CREATE OR REPLACE PACKAGE SkyPkg AS

       FUNCTION GetSkyColour(vPlanet IN VARCHAR2)
       RETURN VARCHAR2;
       
END;
/

Opakowanie :

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

Wywołanie funkcji z treści pakietu :

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow