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