Pakiet Oracle PL / SQL: typ, specyfikacja, treść (przykład)

Spisie treści:

Anonim

Co to jest pakiet w Oracle?

Pakiet PL / SQL to logiczne zgrupowanie powiązanego podprogramu (procedury / funkcji) w jeden element. Pakiet jest kompilowany i przechowywany jako obiekt bazy danych, którego można użyć później.

W tym samouczku nauczysz się:

  • Składniki pakietów
  • Specyfikacja pakietu
  • Treść pakietu
  • Odwoływanie się do elementów pakietu
  • Utwórz pakiet w PL / SQL
  • Deklaracje do przodu
  • Użycie kursorów w pakiecie
  • Przeciążenie
  • Zależność w pakietach
  • Informacje o pakiecie
  • PLIK UTL - przegląd

Składniki pakietów

Pakiet PL / SQL składa się z dwóch komponentów.

  • Specyfikacja pakietu
  • Treść pakietu

Specyfikacja pakietu

Specyfikacja pakietu składa się z deklaracji wszystkich zmiennych publicznych, kursorów, obiektów, procedur, funkcji i wyjątków.

Poniżej znajduje się kilka cech specyfikacji pakietu.

  • Do elementów zadeklarowanych w specyfikacji można uzyskać dostęp spoza pakietu. Takie elementy są znane jako element publiczny.
  • Specyfikacja pakietu jest samodzielnym elementem, co oznacza, że ​​może istnieć samodzielnie, bez treści pakietu.
  • Za każdym razem, gdy pakiet odwołuje się, tworzona jest instancja pakietu dla tej konkretnej sesji.
  • Po utworzeniu instancji dla sesji wszystkie elementy pakietu, które są inicjowane w tej instancji, zachowują ważność do końca sesji.

Składnia

CREATE [OR REPLACE] PACKAGE 
IS… END 

Powyższa składnia przedstawia tworzenie specyfikacji pakietu.

Treść pakietu

Składa się z definicji wszystkich elementów, które są obecne w specyfikacji pakietu. Może również zawierać definicję elementów, które nie są zadeklarowane w specyfikacji, elementy te nazywane są elementami prywatnymi i można je wywołać tylko z wnętrza pakietu.

Poniżej przedstawiono charakterystykę korpusu paczki.

  • Powinien zawierać definicje wszystkich podprogramów / kursorów, które zostały zadeklarowane w specyfikacji.
  • Może również mieć więcej podprogramów lub innych elementów, które nie są zadeklarowane w specyfikacji. Nazywa się to elementami prywatnymi.
  • Jest to obiekt, na którym można polegać i zależy od specyfikacji pakietu.
  • Stan treści pakietu zmienia się na „Nieprawidłowy” po każdej kompilacji specyfikacji. Dlatego należy go ponownie kompilować za każdym razem po kompilacji specyfikacji.
  • Elementy prywatne należy najpierw zdefiniować, zanim zostaną użyte w treści pakietu.
  • Pierwsza część pakietu to część deklaracji globalnej. Obejmuje to zmienne, kursory i elementy prywatne (deklaracja przekazywania), które są widoczne dla całego pakietu.
  • Ostatnią częścią pakietu jest część inicjalizacji pakietu, która jest wykonywana jednorazowo za każdym razem, gdy pakiet jest odwoływany po raz pierwszy w sesji.

Składnia:

CREATE [OR REPLACE] PACKAGE BODY 
IS.END 
  • Powyższa składnia przedstawia tworzenie treści pakietu.

Teraz zobaczymy, jak odnosić się do elementów pakietu w programie.

Odwoływanie się do elementów pakietu

Gdy elementy są zadeklarowane i zdefiniowane w pakiecie, musimy odwołać się do elementów, aby ich użyć.

Do wszystkich publicznych elementów pakietu można się odwołać, wywołując nazwę pakietu, po której następuje nazwa elementu oddzielona kropką, tj. „. ”.

Zmienna publiczna pakietu może być również używana w ten sam sposób do przypisywania i pobierania z nich wartości, np. „. ”.

Utwórz pakiet w PL / SQL

W PL / SQL za każdym razem, gdy pakiet jest odwoływany / wywoływany w sesji, zostanie utworzona nowa instancja dla tego pakietu.

Oracle zapewnia możliwość inicjowania elementów pakietu lub wykonywania jakichkolwiek czynności w czasie tworzenia tej instancji poprzez „Inicjalizację pakietu”.

To nic innego jak blok wykonania, który jest zapisywany w treści pakietu po zdefiniowaniu wszystkich elementów pakietu. Ten blok zostanie wykonany za każdym razem, gdy pakiet zostanie odwołany po raz pierwszy w sesji.

Składnia

CREATE [OR REPLACE] PACKAGE BODY 
IS.BEGINEEND 
  • Powyższa składnia przedstawia definicję inicjalizacji pakietu w treści pakietu.

Deklaracje do przodu

Przekaż deklarację / odwołanie w pakiecie to nic innego jak oddzielne zadeklarowanie elementów prywatnych i zdefiniowanie ich w dalszej części treści pakietu.

Do elementów prywatnych można odwoływać się tylko wtedy, gdy są już zadeklarowane w treści pakietu. Z tego powodu stosuje się deklarację forward. Jednak jest to raczej nietypowe w użyciu, ponieważ w większości przypadków elementy prywatne są deklarowane i definiowane w pierwszej części treści pakietu.

Deklaracja forward jest opcją oferowaną przez Oracle, nie jest obowiązkowa, a używanie i niewykorzystywanie zależy od wymagań programisty.

Składnia:

CREATE [OR REPLACE] PACKAGE BODY 
IS.BEGIN
;END 

Powyższa składnia przedstawia deklarację do przodu. Elementy prywatne są deklarowane osobno w pierwszej części pakietu i zostały zdefiniowane w dalszej części.

Użycie kursorów w pakiecie

W przeciwieństwie do innych Elementów należy zachować ostrożność używając kursorów wewnątrz opakowania.

Jeśli kursor jest zdefiniowany w specyfikacji pakietu lub w globalnej części treści pakietu, to raz otwarty kursor będzie trwał do końca sesji.

Dlatego należy zawsze używać atrybutów kursora „% ISOPEN”, aby zweryfikować stan kursora przed odwołaniem się do niego.

Przeciążenie

Przeciążanie to koncepcja posiadania wielu podprogramów o tej samej nazwie. Podprogramy te będą się różnić od siebie wieloma parametrami lub typami parametrów lub typem zwracania, tj. Podprogram o tej samej nazwie, ale z różną liczbą parametrów, różnymi typami parametrów lub różnymi typami są uznawane za przeciążenie.

Jest to przydatne, gdy wiele podprogramów musi wykonać to samo zadanie, ale sposób wywoływania każdego z nich powinien być inny. W tym przypadku nazwa podprogramu będzie taka sama dla wszystkich, a parametry zostaną zmienione zgodnie z instrukcją wywołującą.

Przykład 1 : W tym przykładzie utworzymy pakiet do pobierania i ustawiania wartości informacji o pracowniku w tabeli „emp”. Funkcja get_record zwróci wynik typu rekordu dla podanego numeru pracownika, a procedura set_record wstawi rekord typu rekordu do tabeli emp.

Krok 1) Tworzenie specyfikacji pakietu

CREATE OR REPLACE PACKAGE guru99_get_setISPROCEDURE set_record (p_emp_rec IN emp%ROWTYPE);FUNCTION get record (p_emp no IN NUMBER) RETURN emp%ROWTYPE;END guru99_get_set:/

Wynik:

Package created

Objaśnienie kodu

  • Linia kodu 1-5 : Tworzenie specyfikacji pakietu dla guru99_get_set z jedną procedurą i jedną funkcją. Te dwa są teraz publicznymi elementami tego pakietu.

Krok 2) Pakiet zawiera treść pakietu, w której zostaną zdefiniowane wszystkie procedury i funkcje. Na tym etapie tworzona jest treść pakietu.

CREATE OR REPLACE PACKAGE BODY guru99_get_setIS PROCEDURE set_record(p_emp_rec IN emp%ROWTYPE)ISPRAGMA AUTONOMOUS_TRANSACTION;BEGININSERT INTO empVALUES(p_emp_rec.emp_name,p_emp_rec.emp_no; p_emp_rec.salary,p_emp_rec.manager);COMMIT;END set_record;FUNCTION get_record(p_emp_no IN NUMBER)RETURN emp%ROWTYPEISl_emp_rec emp%ROWTYPE;BEGINSELECT * INTO l_emp_rec FROM emp where emp_no=p_emp_noRETURN l_emp_rec;END get_record;BEGUN dbms_output.put_line(‘Control is now executing the package initialization part');END guru99_get_set:/

Wynik:

Package body created

Objaśnienie kodu

  • Linia kodu 7 : Tworzenie treści pakietu.
  • Linia kodu 9-16 : Definiowanie elementu „set_record”, który jest zadeklarowany w specyfikacji. To jest to samo, co definiowanie samodzielnej procedury w PL / SQL.
  • Linia kodu 17-24: Definiowanie elementu „get_record”. To jest to samo, co definiowanie samodzielnej funkcji.
  • Linia kodu 25-26: Definiowanie części inicjującej pakiet.

Krok 3) Utworzenie anonimowego bloku do wstawiania i wyświetlania rekordów, odwołując się do powyższego utworzonego pakietu.

DECLAREl_emp_rec emp%ROWTYPE;l_get_rec emp%ROWTYPE;BEGINdbms output.put line(‘Insert new record for employee 1004');l_emp_rec.emp_no:=l004;l_emp_rec.emp_name:='CCC';l_emp_rec.salary~20000;l_emp_rec.manager:=’BBB’;guru99_get_set.set_record(1_emp_rec);dbms_output.put_line(‘Record inserted');dbms output.put line(‘Calling get function to display the inserted record'):l_get_rec:=guru99_get_set.get_record(1004);dbms_output.put_line(‘Employee name: ‘||l_get_rec.emp_name);dbms_output.put_line(‘Employee number:‘||l_get_rec.emp_no);dbms_output.put_line(‘Employee salary:‘||l_get_rec.salary');dbms output.put line(‘Employee manager:‘||1_get_rec.manager);END:/

Wynik:

Insert new record for employee 1004Control is now executing the package initialization partRecord insertedCalling get function to display the inserted recordEmployee name: CCCEmployee number: 1004Employee salary: 20000Employee manager: BBB

Objaśnienie kodu:

  • Linia kodu 34-37: Wypełnianie danych dla zmiennej typu rekordu w anonimowym bloku w celu wywołania elementu „set_record” pakietu.
  • Linia kodu 38: Wywołano 'set_record' pakietu guru99_get_set. Teraz pakiet jest tworzony i będzie istniał do końca sesji.
  • Część inicjująca pakiet jest wykonywana, ponieważ jest to pierwsze wywołanie pakietu.
  • Rekord jest wstawiany przez element „set_record” do tabeli.
  • Linia kodu 41: Wywołanie elementu „get_record” w celu wyświetlenia szczegółów wstawionego pracownika.
  • Pakiet jest odsyłany po raz drugi podczas wywołania pakietu „get_record”. Ale część inicjalizacyjna nie jest tym razem wykonywana, ponieważ pakiet jest już zainicjowany w tej sesji.
  • Linia kodu 42-45: Drukowanie danych pracownika.

Zależność w pakietach

Ponieważ pakiet jest logicznym zgrupowaniem powiązanych rzeczy, ma pewne zależności. Poniżej przedstawiono zależność, którą należy się zająć.

  • Specyfikacja to samodzielny obiekt.
  • Treść pakietu zależy od specyfikacji.
  • Treść pakietu można skompilować osobno. Za każdym razem, gdy kompilowana jest specyfikacja, treść musi zostać ponownie skompilowana, ponieważ stanie się niepoprawna.
  • Podprogram w treści pakietu, który jest zależny od elementu prywatnego, powinien zostać zdefiniowany dopiero po zadeklarowaniu elementu prywatnego.
  • Obiekty bazy danych, do których odwołuje się specyfikacja i treść, muszą mieć prawidłowy stan w momencie kompilacji pakietu.

Informacje o pakiecie

Po utworzeniu informacji o pakiecie informacje o pakiecie, takie jak źródło pakietu, szczegóły podprogramu i szczegóły przeciążenia, są dostępne w tabelach definicji danych Oracle.

Poniższa tabela zawiera tabelę definicji danych i informacje o pakiecie, które są dostępne w tabeli.

Nazwa tabeli Opis Pytanie
ALL_OBJECT Podaje szczegóły pakietu, takie jak object_id, create_date, last_ddl_time, itp. Będzie zawierał obiekty utworzone przez wszystkich użytkowników. SELECT * FROM all_objects, gdzie object_name = ' '
USER_OBJECT Podaje szczegóły pakietu, takie jak object_id, create_date, last_ddl_time, itp. Będzie zawierać obiekty utworzone przez bieżącego użytkownika. SELECT * FROM user_objects gdzie object_name = ' '
ALL_SOURCE Podaje źródło obiektów tworzonych przez wszystkich użytkowników. SELECT * FROM all_source where name = ' '
USER_SOURCE Podaje źródło obiektów utworzonych przez bieżącego użytkownika. SELECT * FROM user_source, gdzie nazwa = ''
ALL_PROCEDURES Podaje szczegóły podprogramu, takie jak identyfikator_obiektu, szczegóły przeciążenia itp. Utworzone przez wszystkich użytkowników. SELECT * FROM all_procedures Where object_name = ' '
USER_PROCEDURES Podaje szczegóły podprogramu, takie jak identyfikator_obiektu, szczegóły przeciążenia itp. Utworzone przez bieżącego użytkownika. SELECT * FROM user_procedures gdzie object_name = ' '

PLIK UTL - przegląd

Plik UTL to oddzielny pakiet narzędzi dostarczany przez Oracle do wykonywania zadań specjalnych. Służy głównie do odczytu i zapisu plików systemu operacyjnego z pakietów lub podprogramów PL / SQL. Posiada oddzielne funkcje do umieszczania informacji i pobierania informacji z plików. Umożliwia również odczyt / zapis w natywnym zestawie znaków.

Programista może użyć tego do zapisania plików systemu operacyjnego dowolnego typu, a plik zostanie zapisany bezpośrednio na serwerze bazy danych. Nazwa i ścieżka katalogu zostaną wymienione podczas pisania.

Podsumowanie

Nauczyliśmy się teraz pakietów w PL / SQL i powinieneś być w stanie pracować nad następującymi elementami.

  • Pakiety PL / SQL i ich komponenty
  • Charakterystyka opakowań
  • Odwoływanie się i przeciążanie elementów pakietu
  • Zarządzanie zależnościami w pakietach
  • Przeglądanie informacji o pakiecie
  • Co to jest plik UTL