Notatki
Pokaz slajdów
Konspekt
1
Rozdział 12
 Pakiety podprogramów
Dynamiczny SQL
  • Pakiety podprogramów, specyfikacja i ciało pakietu, zmienne i kursory pakietowe, pseudoinstrukcje (dyrektywy kompilatora), dynamiczny SQL
2
Pakiety
  • Pakiet (ang. package) grupuje powiązane logicznie typy, procedury, funkcje, zmienne i kursory. Składa się ze specyfikacji (interfejsu) i ciała (implementacji). W specyfikacji mieszczą się deklaracje typów, zmiennych, stałych, kursorów, wyjątków i podprogramów. W ciele mieści się implementacja specyfikacji.


3
Cele stosowania pakietów
  • Cechy:
    • modularność
    • ukrycie informacji - użytkownikowi jest udostępniana tylko specyfikacja pakietu (interfejs), natomiast implementacja procedur i funkcji jest niewidoczna
    • zwiększenie funkcjonalności - zmienne zadeklarowane
      w pakietach istnieją przez całą sesję użytkownika; dzięki temu mogą one służyć do wzajemnej komunikacji różnych procesów
    • zwiększenie szybkości działania – przy pierwszym odwołaniu do pakietu cała jego zawartość jest ładowana do pamięci
    • współdzielenie przez wielu użytkowników
    • możliwość zmiany implementacji pakietu bez konieczności rekompilacji modułów zależnych

4
Definiowanie pakietu
5
Inicjalizacja pakietu
  • W momencie pierwszego odwołania do dowolnego elementu z pakietu zawartość całego pakietu zostaje załadowana do bufora. Zmienne i kursory mogą być inicjalizowane w części inicjalizacyjnej pakietu.
6
Przykład pakietu
7
Wywołanie procedury lub funkcji pakietu
  • Zdefiniowaną w pakiecie procedurę lub funkcję wywołujemy poprzedzając jej nazwę nazwą pakietu, np.
8
Pragmy
  • Pragmy (pseudoinstrukcje) to dyrektywy zawierające wskazówki dla kompilatora przetwarzane na etapie kompilacji.
    • EXCEPTION_INIT: pozwala na przypisanie nazwanego wyjątku do błędu Oracle
    • RESTRICT_REFERENCES: potwierdza i weryfikuje czystość funkcji, wymusza sprawdzenie czystości funkcji w stosunku do informacji podanych na etapie kompilacji (tylko w wersjach wcześniejszych od Oracle8i). Użycie:
  • PRAGMA RESTRICT_REFERENCES (nazwa_funkcji, poziom_czystości),
  • gdzie poziom czystości to:
      • RNDS, RNPS – Reads No Database/Package State
      • WNDS, WNPS – Writes No Database/Package State
      • TRUST – brak kontroli czystości funkcji
    • AUTONOMOUS_TRANSACTION: pozwala na wykonanie pod-programu (procedury lub funkcji) w ramach oddzielnej transakcji
9
Przykład pragmy
10
Słownik bazy danych
  • USER_OBJECTS - informacja o pakietach w schemacie użytkownika






  • USER_SOURCE - kod źródłowy pakietów użytkownika


11
Dynamiczny SQL
  • Dynamiczny SQL pozwala na konstruowanie i wykonywanie poleceń, których pełna treść nie jest znana w momencie kompilacji aplikacji, lecz dopiero w trakcie wykonywania programu.


  • Dynamiczny SQL pozwala na:
    • konstrukcję elastycznego kodu (np. procedury operującej na tablicy przekazanej jako parametr, dynamicznego tworzenia warunków w klauzuli WHERE)
    • konstrukcję kodu wykonywalnego w trakcie działania programu
    • wykonywanie w bloku PL/SQL instrukcji DDL (np. CREATE TABLE) oraz DCL (GRANT, ALTER SESSION) i instrukcji sterujących sesją, zabronionych w statycznym PL/SQL
12
Polecenie EXECUTE IMMEDIATE
  • Polecenie EXECUTE IMMEDIATE przygotowuje (parsuje) i natychmiast wykonuje polecenie SQL bądź blok PL/SQL








    • polecenie to ciąg znaków zawierający polecenie SQL (bez średnika na końcu)
    • zmienna_i to zmienna, do której zostaną wczytane wyniki zapytania
    • arg_wiązania_i to wyrażenie, którego wartość jest przekazywana do polecenia
13
Przykład dynamicznego SQL (1)
14
Przykład dynamicznego SQL (2)
15
Przykład dynamicznego SQL (3)