oracle pl/sql - kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · oracle...

23
Oracle PL/SQL Oracle PL/SQL Paweł Rajba Paweł Rajba [email protected] http://www.kursy24.eu/

Upload: ngohanh

Post on 14-Apr-2018

240 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Oracle PL/SQL - Kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl Zawartość modułu 5 Wprowadzenie Tworzenie

Oracle PL/SQLOracle PL/SQL

Paweł RajbaPaweł Rajba

[email protected]://www.kursy24.eu/

Page 2: Oracle PL/SQL - Kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl Zawartość modułu 5 Wprowadzenie Tworzenie

Zawartość modułu 5Zawartość modułu 5

WprowadzenieTworzenie i wykonywanie procedur i funkcjiInstrukcja RETURNParametry procedur i funkcji oraz ich przesyłanieMetadane programuPakiety PL/SQL, pakiety wielokrotnego użyciaZbiory wynikówPrzeciążanie deklaracji

Oracle PL/SQL Copyright © Paweł Rajba- 2 -

Page 3: Oracle PL/SQL - Kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl Zawartość modułu 5 Wprowadzenie Tworzenie

WprowadzenieWprowadzenie

Mamy do dyspozycjiProceduryFunkcjePakiety

CechyUnikalne nazwySkładowane w bazie danychDostępne są metadane (ze słownika danych)

Oracle PL/SQL Copyright © Paweł Rajba- 3 -

Page 4: Oracle PL/SQL - Kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl Zawartość modułu 5 Wprowadzenie Tworzenie

Tworzenie procedurTworzenie procedur

Procedurę tworzymy poprzez instrukcję:CREATE [OR REPLACE] PROCEDURE nazwa[(param1 {IN|OUT|IN OUT} typ DEFAULT expr, ... (paramN {IN|OUT|IN OUT} typ DEFAULT expr]{IS|AS}[deklaracje zmiennych]BEGIN ...[EXCEPTION ...]END [nazwa procedury]

Oracle PL/SQL Copyright © Paweł Rajba- 4 -

Page 5: Oracle PL/SQL - Kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl Zawartość modułu 5 Wprowadzenie Tworzenie

Tworzenie funkcjiTworzenie funkcji

Funkcję tworzymy poprzez instrukcję:CREATE [OR REPLACE] FUNCTION nazwa[(param1 {IN|OUT|IN OUT} typ DEFAULT expr, ... (paramN {IN|OUT|IN OUT} typ DEFAULT expr]RETURN typ_danych{IS|AS}[deklaracje zmiennych]BEGIN ...[EXCEPTION ...]END [nazwa funkcji]

Oracle PL/SQL Copyright © Paweł Rajba- 5 -

Page 6: Oracle PL/SQL - Kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl Zawartość modułu 5 Wprowadzenie Tworzenie

Instrukcja RETURNInstrukcja RETURN

Służy zwracania wartościZatrzymuje wykonywania podprogramuStosujemy

RETURN; – proceduryRETURN wyrażenie; – funkcje

Oracle PL/SQL Copyright © Paweł Rajba- 6 -

Page 7: Oracle PL/SQL - Kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl Zawartość modułu 5 Wprowadzenie Tworzenie

Wykonywanie procedur lub funkcjiWykonywanie procedur lub funkcji

Wykonywanie jest na jeden z trzech sposobów:Jako instrukcję bloku PL/SQL

Aplikacja apex,inne kawałki koduUżywając EXECUTE

SQL*PlusUżywając CALL

SQL*Plus

Przykład: procedury-funkcje-start.txt

Oracle PL/SQL Copyright © Paweł Rajba- 7 -

Page 8: Oracle PL/SQL - Kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl Zawartość modułu 5 Wprowadzenie Tworzenie

Parametry procedur i funkcjiParametry procedur i funkcji

Przekazywanie parametrówPozycyjne, Imienne, MieszaneTypy %TYPE, %ROWTYPE

Deklarowanie trybówIN (domyślnie), OUT, IN OUT

Parametry domyślnePrzykład: procedury-funkcje-parametry.txt

Oracle PL/SQL Copyright © Paweł Rajba- 8 -

Page 9: Oracle PL/SQL - Kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl Zawartość modułu 5 Wprowadzenie Tworzenie

Kilka uwagKilka uwag

Procedury i funkcje są przechowywane w postaci skompilowanej

Kod źródłowy jest zapisywany w słownikachKlauzula OR REPLACE powoduje nadpisanie istniejącej wersjiPrzed i po operacji tworzenia procedury lub funkcji jest wykonywany COMMITFunkcje nie powinny mieć parametrów typuOUT i IN OUT (do tego są procedury)

Oracle PL/SQL Copyright © Paweł Rajba- 9 -

Page 10: Oracle PL/SQL - Kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl Zawartość modułu 5 Wprowadzenie Tworzenie

Metadane podprogramuMetadane podprogramu

Mamy cztery perspektywyUSER_OBJECTS, ALL_OBJECTS

Info o wersji skompilowanejUSER_SOURCE, ALL_SOURCE

Kody źródłowe

Odpalamy zapytaniaselect object_name, object_type, status from user_objects where object_name='SP_ZNAKI';select text from user_sourcewhere name='SP_ZNAKI';

Oracle PL/SQL Copyright © Paweł Rajba- 10 -

Page 11: Oracle PL/SQL - Kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl Zawartość modułu 5 Wprowadzenie Tworzenie

Pakiety PL/SQLPakiety PL/SQL

Pakiet składa się z dwóch częścispecyfikacji

określa publiczne procedury i funkcjezawiera tylko nagłówki

treścizawiera treść metod publicznychmoże zawierać także procedury i funkcje prywatne

Pakiety wprowadzają modularność

Oracle PL/SQL Copyright © Paweł Rajba- 11 -

Page 12: Oracle PL/SQL - Kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl Zawartość modułu 5 Wprowadzenie Tworzenie

Deklaracja pakietuDeklaracja pakietu

Część specyfikacjiCREATE [OR REPLACE] PACKAGE nazwa_pakietu{IS|AS} [PRAGMA SERIALLY_REUSABLE;][type_definition][constant_declaration][variable_declaration][exception_declaration][cursor_declaration][procedure_header][function_header]END [nazwa_pakietu]

Oracle PL/SQL Copyright © Paweł Rajba- 12 -

Page 13: Oracle PL/SQL - Kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl Zawartość modułu 5 Wprowadzenie Tworzenie

Deklaracja pakietuDeklaracja pakietu

Część treściCREATE [OR REPLACE] PACKAGE BODY nazwa{IS|AS} [PRAGMA SERIALLY_REUSABLE;][private_declarations][cursor_body][public_procedures_implementation][public_functions_implementation] [BEGIN ... // instrukcje ]END [nazwa_pakietu]

Oracle PL/SQL Copyright © Paweł Rajba- 13 -

Page 14: Oracle PL/SQL - Kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl Zawartość modułu 5 Wprowadzenie Tworzenie

Pakiety PL/SQLPakiety PL/SQL

Kilka uwagNazwa specyfikacji i treści pakietu muszą mieć taką samą nazwęSekcja zaczynająca się do BEGIN to sekcja inicjalizacyjna (pakietu nie zaczynamy od BEGIN)Deklaracje publiczne mogą być w dowolnej kolejności

odwołania mogą być tylko do już zadeklarowanych składn.Najpierw kompilujemy specyfikację, potem treśćSpecyfikacja może istnieć bez treści (wtedy nie może być deklaracji procedur i funkcji)

Oracle PL/SQL Copyright © Paweł Rajba- 14 -

Page 15: Oracle PL/SQL - Kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl Zawartość modułu 5 Wprowadzenie Tworzenie

Pakiety PL/SQLPakiety PL/SQL

Odwołania do obiektówpakiet.składowa

Obiekty prywatne dostępne są tylko w ramach definiowanego pakietuTworzenie instancji i inicjacja pakietu

Przy pierwszym odwołaniu do składowej pakietu, jest on ładowany do pamięci i pozostaje tam na czas sesjiWtedy też wykonywana jest sekcja inicjalizacyjna

Przykład: pakiety.txtOracle PL/SQL Copyright © Paweł Rajba- 15 -

Page 16: Oracle PL/SQL - Kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl Zawartość modułu 5 Wprowadzenie Tworzenie

Zwracanie zbiorów wynikówZwracanie zbiorów wyników

Może mieć miejsceprzy zwracaniu wyniku przez funkcjęprzy przekazaniu parametru typu OUT procedury

Może być na dwa sposobyZa pomocą kusorówZa pomocą funkcji tabelowych

ten punkt umówimy później przy okazji kolekcji

Oracle PL/SQL Copyright © Paweł Rajba- 16 -

Page 17: Oracle PL/SQL - Kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl Zawartość modułu 5 Wprowadzenie Tworzenie

Zwracanie zbiorów wynikówZwracanie zbiorów wyników

Wykorzystanie kursorów może być na 2 sposobyPoprzez użycie słabego kursora SYS_REFCURSOR w typie zwrotnym funkcji lub w typie danych parametru OUT proceduryDefiniujemy typ REF CURSOR w specyfikacji pakietu i następnie wykorzystujemy j.w.

w specyfikacji może być tylko deklaracja typu (nie może być deklaracji zmiennych)

Przykład: zbiory-wynikow.txt

Oracle PL/SQL Copyright © Paweł Rajba- 17 -

Page 18: Oracle PL/SQL - Kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl Zawartość modułu 5 Wprowadzenie Tworzenie

Funkcje w instrukcjach SQLFunkcje w instrukcjach SQL

Funkcje możemy wykorzystywać w:instrukcji SELECT (list kolumn, klazule WHERE, HAVING, GROUP BY, ORDER BY)instrukcji INSERT (klauzula VALUES)instrukcji UPDATE (klauzula SET)

Odwołanie[[schemat.]pakiet.]funkcja(p1,...,pN)

Przykład: funkcje-instrukcje.txt

Oracle PL/SQL Copyright © Paweł Rajba- 18 -

Page 19: Oracle PL/SQL - Kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl Zawartość modułu 5 Wprowadzenie Tworzenie

Przesyłanie parametrówPrzesyłanie parametrów

Odbywa się na sposobyprzez wartośćprzez odwołanie (wskaźnik)

Zachowanie domyślneIN – przez odwołanieOUT, IN OUT – przez wartość

W przypadku wyjątku kopia (być może zmieniona) jest odrzucana i pierwotna wartość zachowanaMożna to domyślne zachowanie zmienić używając wskazówki dla kompilatora NOCOPY – wtedy przekazywanie jest przez odwołanie (szybsze rozwiązanie)

Oracle PL/SQL Copyright © Paweł Rajba- 19 -

Page 20: Oracle PL/SQL - Kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl Zawartość modułu 5 Wprowadzenie Tworzenie

Przesyłanie parametrówPrzesyłanie parametrów

Wskazówka NOCOPYDeklaracja parametru

param {OUT | IN OUT} NOCOPY typ_danychJest to tylko wskazówka, może zostać przez kompilator zignorowanaParametr nie może elementem tabeli indeksowej (ale może być tabelą indeksową)Używanie NOCOPY zwiększa szybkość przy przekazywaniu dużych obiektów (np. kolekcji)

Przykład: parametry-przesylanie.txt

Oracle PL/SQL Copyright © Paweł Rajba- 20 -

Page 21: Oracle PL/SQL - Kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl Zawartość modułu 5 Wprowadzenie Tworzenie

Przeciążanie deklaracjiPrzeciążanie deklaracji

Co to jest przeciążanie, każdy wiePrzeciążać możemy procedury i funkcje w ramach pakietuWarunki przeciążania

różne ilości parametrówróżne typy parametrów (int i number w tym kontekście nie są różne)

Przykład: procedury-funkcje-przeciazanie.txt

Oracle PL/SQL Copyright © Paweł Rajba- 21 -

Page 22: Oracle PL/SQL - Kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl Zawartość modułu 5 Wprowadzenie Tworzenie

Pakiety wielokrotnego użyciaPakiety wielokrotnego użycia

Normalnie, uruchomienie pakietu jest przechowywane w pamięci sesjiWraz ze wzrostem liczby użytkowników, wzrasta zużycie pamięci sesjiOznaczenie pakietu jako serially_reusable

Powoduje wykonanie pakietu tylko na czas wywołania bazodanowegoStan wykonywalny pakietu dostaje niewielkę pulę pamięci, która po ukończeniu wywołania bazodanowego zostanie zwolniona

Oracle PL/SQL Copyright © Paweł Rajba- 22 -

Page 23: Oracle PL/SQL - Kursy 24kursy24.eu/public/download/plsql/wyklady/oracle-plsql-w05.pdf · Oracle PL/SQL Paweł Rajba pawel@ii.uni.wroc.pl Zawartość modułu 5 Wprowadzenie Tworzenie

Pakiety wielokrotnego użyciaPakiety wielokrotnego użycia

SkładniaPRAGMA SERIALLY_REUSABLE

Kilka uwagDeklaracja pragmy musi być zarówno w specyfikacji, jak i w treściPo każdym wykonaniu, zmienne są resetowane, a kursory zamykanePakiet wielokrotnego użycia nie może zawierać procedur (funkcji), z któych korzystają wyzwalacze

Przykład: pakiety-wielokrotne.txtOracle PL/SQL Copyright © Paweł Rajba- 23 -