Notatki
Pokaz slajdów
Konspekt
1
Rozdział 11
Procedury i funkcje składowane
  • Zmienne podstawienia i zmienne wiązane, podprogramy, procedury składowane, typy argumentów, wywoływanie procedur, funkcje składowane, poziomy czystości funkcji, funkcje tablicowe
2
Zmienne podstawienia
  • Zmienne definiowane przez użytkownika mogą być użyte w miejsce nazw relacji, atrybutów lub jako wartości atrybutów. Zmienna podstawienia nie może być pierwszym słowem polecenia. Zmienne podstawienia są zawsze typu CHAR.
  • Polecenie DEFINE bez parametrów wyświetla listę wszystkich zmiennych podstawienia.
3
Zmienne wiązane
  • Zmienne wiązane to zmienne deklarowane w SQL*Plus lub innym środowisku zewnętrznym, które są dostępne w programach PL/SQL. Mogą służyć do przekazywania wartości z PL/SQL do SQL i do optymalizacji zapytań. W PL/SQL zachowują się jak zwykłe zmienne.
4
Zmienne wiązane kursorowe
  • Zmienne wiązane kursorowe pozwalają na odczytanie w SQL*Plus wyniku zapytania umieszczonego w bloku PL/SQL. Mogą być stosowane zarówno w anonimowych blokach PL/SQL, jak i jako parametr lub typ wynikowy procedury lub funkcji.
5
Podprogramy
  • Procedury (wykonują określone akcje), funkcje (wykonują obliczenia i zwracają wartości) i pakiety (zbierają w całość logicznie powiązane procedury, funkcje, zmienne i kursory):
    • przechowywane w bazie danych w postaci skompilowanej i źródłowej (źródło dostępne poprzez USER_SOURCE)
    • postać skompilowana zwiększenie szybkości działania
    • współdzielone przez wielu użytkowników
  • Zalety:
    • rozszerzalność
    • modularność
    • łatwość pielęgnowania kodu
    • możliwość wielokrotnego użycia kodu
    • ukrycie szczegółów implementacji
6
Definiowanie procedury
  • nazwa procedury musi być unikalna w ramach schematu (lub pakietu)
  • między słowami kluczowymi IS i BEGIN umieszczamy deklaracje wszystkich zmiennych i kursorów lokalnych
  • między słowami kluczowymi BEGIN i END umieszczamy kod PL/SQL, który wykonuje dana procedura
7
Argumenty procedur i funkcji
  • w liście argumentów nie podajemy rozmiaru argumentu (tylko typ)
  • argument formalny: używany w deklaracji procedury i w części wykonywalnej PL/SQL
  • argument aktualny: używany przy wywoływaniu procedury
8
Przykład procedury
9
Definiowanie funkcji
  • nazwa funkcji musi być unikalna w ramach schematu (lub pakietu)
  • po słowie kluczowym RETURN umieszczamy typ zwracany przez funkcję
  • między słowami kluczowymi IS i BEGIN umieszczamy deklaracje wszystkich zmiennych i kursorów lokalnych
  • między słowami kluczowymi BEGIN i END umieszczamy kod PL/SQL, który wykonuje dana funkcja
  • w kodzie PL/SQL musi się znaleźć instrukcja RETURN


10
Przykład funkcji
11
Wywołanie procedur i funkcji (PL/SQL)
  • UWAGA: wołanie funkcji z poziomu SQL jest możliwe tylko wtedy gdy funkcja posiada odpowiedni poziom „czystości”
12
Czystość funkcji
  • Aby funkcja mogła być wywoływana z poziomu SQL, musi ona posiadać odpowiedni poziom czystości
    • funkcja wywoływana z instrukcji SELECT nie może modyfikować żadnych wartości w bazie danych
    • funkcja wywoływana z instrukcji INSERT, UPDATE, DELETE nie może odczytywać i modyfikować żadnej tabeli, której dotyczy instrukcja
    • funkcja wywoływana z instrukcji SELECT, INSERT, UPDATE, DELETE nie może zawierać instrukcji sterujących sesją i transakcjami oraz instrukcji DDL
13
Kompilowanie procedury lub funkcji
14
Słownik bazy danych
  • USER_OBJECTS - informacja o obiektach w schemacie użytkownika






  • USER_SOURCE - kod źródłowy procedur i funkcji użytkownika


15
Funkcje tablicowe
  • Funkcje tablicowe dają w wyniku kolekcję krotek. Nazwy tych funkcji  mogą być wykorzystywane zamiast nazw tabel. Funkcje tablicowe mogą również przyjmować kolekcję krotek jako parametr. Funkcje mogą być zrównoleglone oraz potokowane, co zwiększa efektywność przetwarzania poprzez:
    • wielowątkowe wykonanie funkcji
    • eliminację przechowywania wyników pośrednich
    • zmniejszenie czasu odpowiedzi na pierwsze wyniki
    • iteracyjne dostarczanie kolejnych krotek wyniku
  • W przypadku funkcji potokowanych do dostarczenia krotki do wyniku służy komenda PIPE ROW (...)
16
Przykład funkcji tablicowej