Ćwiczenie 8_1
I. PAKIETY
PL/SQL umożliwia zgrupowanie wszystkich logicznie powiązanych ze sobą podprogramów, zmiennych, stałych, kursorów i in. w ramach jednego obiektu, zwanego pakietem. Pakiety mogą być kompilowane i przechowywane w bazie danych, dzięki czemu z ich zawartości mogą korzystać aplikacje.
Każdy pakiet składa się z dwóch części:
specyfikacji (dostępnej dla aplikacji),
ciała (ukrytej).
Część specyfikacji jest interfejsem do zawartości pakietu przeznaczonym dla aplikacji. Wewnątrz specyfikacji deklaruje się obiekty publiczne, z których może korzystać zarówno pakiet, jak i aplikacje. Zmienne i stałe zadeklarowane w części specyfikacji zachowują swoje wartości na czas trwania sesji.
Ciało pakietu implementuje specyfikację - definiuje kursory i podprogramy zadeklarowane w specyfikacji pakietu, a także zwraca deklaracje obiektów prywatnych, które nie są dostępne dla aplikacji.
Specyfikację pakietu tworzy się poleceniem CREATE [OR REPLACE] PACKAGE
Składnia:
CREATE [OR REPLACE] PACKAGE nazwa pakietu IS
publiczne deklaracje
specyfikacje podprogramów
END;
Ciało pakietu tworzy się poleceniem CREATE [OR REPLACE] PACKAGE BODY.
Składnia:
CREATE [OR REPLACE] PACKAGE BODY nazwa pakietu IS
prywatne deklaracje
definicje podprogramów
[BEGIN
instrukcje inicjalizujące pakietu]
END;
Pakiet usuwa się poleceniem:
DROP PACKAGE nazwa_pakietu
Przykład:
CREATE [OR REPLACE] PACKAGE pracownik IS
PROCEDURE dodaj_pr(
id_pracownika NUMBER,
nazwisko VARCHAR2,
etat VARCHAR2,
id_szefa NUMBER,
placa NUMBER,
id_zesp NUMBER);
PROCEDURE zwolnij_pr(
id_pracownika NUMBER);
END;
/
CREATE [OR REPLACE] PACKAGE BODY pracownik IS
PROCEDURE dodaj_pr(
id_pracownika NUMBER,
nazwisko VARCHAR2,
etat VARCHAR2,
id_szefa NUMBER,
placa NUMBER,
id_zesp NUMBER) IS
BEGIN
INSERT INTO prac VALUES(id_pracownika,
nazwisko, etat, id_szefa, sysdate, placa, 0, id_zesp);
END dodaj_pr;
PROCEDURE zwolnij_pr(
id_pracownika NUMBER) IS
BEGIN
DELETE FROM prac
WHERE id_prac=id_pracownika;
END zwolnij_pr;
END pracownik;
/
Zdefiniowany w pakiecie podprogram wywołujemy poprzedzając go nazwą pakietu np:
exec pracownik.dodaj_pr(555, 'ZETBACKI', 'ASYSTENT', 130, 1234, 30);
lub
exec pracownik.zwolnij_pr(555);
LABORATORIUM z BAZ DANYCH
ORACLE
2