Pakiet jest obiektem grupującym logicznie połączone typy PL/SQL, podprogramy tworząc w ten
sposób jeden moduł do obiektów którego możemy się dowoływać poprzez notację kropkową:
x:=nazwa_pakietu.zmienna_zadeklarowana_w_pakiecie;
Pakiet skłąda się z dwóch części. W pierwszej części (część specyfikacji) znajdują się
deklaracje dostępne dla użytkownika (publiczne). W części BODY następujepełna definicja
obiektów prywatnych. Część BODY nie jest wymagana.
Przykład:
Create Or Replace PACKAGE users_package AS
PROCEDURE adduser(name VARCHAR2, first_name VARCHAR2);
PROCEDURE deluser(userid NUMBER);
END users_package;
Create Or Replace PACKAGE BODY users_package AS
PROCEDURE adduser(name VARCHAR2, first_name VARCHAR2) IS
BEGIN
INSERT INTO users VALUES (users_seq.NEXTVAL, name, first_name);
END adduser;
PROCEDURE deluser(userid NUMBER) IS
BEGIN
DELETE FROM users WHERE id=userid;
END deluser;
PROCEDURE proc1 IS
BEGIN
...
END proc1;
END users_package;
W powyższym przykładzie zdefiniowaliśmy trzy prodecury w pakiecie, z tym że, tylko dwie
z nich zadeklarowalismy jako publiczne (adduser i deluser) ponieważ tylko ich deklaracje
znajdują się w części specyfikacji. Trzecia procedura proc1 nie może być wywoływana
z zewnątrz przez uzytkowników. Może być jedynie wywoływane przez inne podprogramy z tego
samego pakietu.
Ważną cechą pakietu jest ich wydajność. Kiedy następuje wywołanie podprogramu z pakietu
po raz pierwszy cały pakiet jest ładowany do pamięci. Przy kolejnych odwołaniach do
pakietu dane pobierane są z pamięci, a nie z dysku co redukuje częstotliwość operacji dyskowych.
Powrót
|