1 Wprowadzenie do bloków nazwanych 1. 2 Parametry 2. 3 Procedury i funkcje 3. 4 Pakiety 6. 5 Podsumowanie Źródła 10

Podobne dokumenty
w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

Język PL/SQL Procedury i funkcje składowane

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.

Pakiety podprogramów Dynamiczny SQL

Oracle PL/SQL. Paweł Rajba.

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

Procedury i funkcje składowane

Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne

Język PL/SQL Pakiety podprogramów

Zaawansowane bazy danych i hurtownie danych semestr I

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

PODSTAWY BAZ DANYCH 13. PL/SQL

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Podprogramy. Rozdział 11 Procedury i funkcje składowane

Język PL/SQL. Rozdział 4. Procedury i funkcje składowane

Bloki anonimowe w PL/SQL

Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Plan wykładu BAZY DANYCH II WYKŁAD 7. Pakiety. Zalety pakietów

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

Procedury składowane. Funkcje vs. procedury Funkcja. Procedura. zazwyczaj ma parametry tylko typu IN; można wywoływać z poziomu

PL/SQL. Zaawansowane tematy PL/SQL

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

Składowane procedury i funkcje

Używany kiedy pełna treść instrukcji SQL jest nieznana przed uruchomieniem programu.

Oracle11g: Programowanie w PL/SQL

1 Kursory 1. 2 Wyjątki Wyjątki predefiniowane Wyjątki niezdefiniowane wcześniej Definiowanie własnych wyjątków...

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Oracle PL/SQL. Paweł Rajba.

15. Funkcje i procedury składowane PL/SQL

Oracle PL/SQL. Paweł Rajba.

Oracle10g: Programowanie w PL/SQL

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Plan wykładu Projekt fizyczny bazy danych Wprowadzenie PL/SQL PL/SQL Cechy PL/SQL

Tworzenie raportów XML Publisher przy użyciu Data Templates

ORACLE (Wykład 1) aragorn.pb.bialystok.pl/~aonisko. Typy rozproszonych baz danych. Systemy klient-serwer. Klient-serwer: Przykład

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;

Październik Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska. Systemy baz danych - wykład III. dr inż.

Plan wykładu BAZY DANYCH II WYKŁAD 3. Zasięg zmiennych. Zasięg zmiennych

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

PL/SQL. Zaawansowane tematy PL/SQL

Procedury Funkcje Pakiety. Tworzenie procedury

Wykład 9. Pakiety w języku PL/SQL

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

1 DML - zapytania, część II Grupowanie Operatory zbiorowe DML - modyfikacja 7. 3 DCL - sterowanie danymi 9.

Plan wykładu BAZY DANYCH II WYKŁAD 9. Dynamiczny SQL. Dynamiczny SQL

Plan wykładu BAZY DANYCH II WYKŁAD 2. Bloki. Struktura bloku

BAZA DANYCH SIECI HOTELI

Oracle PL/SQL. Paweł Rajba.

Oracle PL/SQL. Paweł Rajba.

Wykład 8. SQL praca z tabelami 5

Hurtownia Świętego Mikołaja projekt bazy danych

Ćwiczenie 13 PL/SQL. Język PL/SQL procedury, funkcje, pakiety, wyzwalacze

Cele. Definiowanie wyzwalaczy

Język PL/SQL. Rozdział 2. Kursory

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz

Kursory i wyjątki. (c) Instytut Informatyki Politechniki Poznańskiej 1

Bazy danych, 4. wiczenia

Deklarowanie kursora

Microsoft SQL Server Podstawy T-SQL

Relacyjne bazy danych. Podstawy SQL

Oracle11g: Wprowadzenie do SQL

1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

INTERNETOWE BAZY DANYCH materiały pomocnicze - wykład X

Kursor jawny. Rozdział 10a Kursory. Deklarowanie kursora (1) Deklarowanie kursora (2)

ZASTOSOWANIE PROCEDUR, FUNKCJI I PAKIETÓW

PL/SQL. Zaawansowane tematy PL/SQL. Piotr Medoń

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

Wykład 5. SQL praca z tabelami 2

11 marca Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska. Systemy baz danych - wykład III. dr inż.

Kursor. Rozdział 10a Kursory. Otwieranie kursora. Deklarowanie kursora

Relacyjne bazy danych. Podstawy SQL

1. ELEMENTY JĘZYKA PL/SQL

Programowanie po stronie serwera w SZBD. Robert A. Kłopotek Wydział Matematyczno-Przyrodniczy. Szkoła Nauk Ścisłych, UKSW

CREATE TABLE autorzy ( id_autora SERIAL PRIMARY KEY, imie TEXT, nazwisko TEXT );

2 PL/SQL - podstawy Zmienne i stałe Operatory SQL w PL/SQL Instrukcje sterujące... 8

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

SQL 4 Structured Query Lenguage

Systemowe aspekty baz

Technologie baz danych WYKŁAD 7: Wyjątki

Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi

Rozdział 17. Zarządzanie współbieżnością zadania dodatkowe

Administracja i programowanie pod Microsoft SQL Server 2000

Ćwiczenie 13 PL/SQL. Język PL/SQL procedury, funkcje, pakiety, wyzwalacze

Bazy danych. Plan wykładu. Złczenia tabel. Perspektywy cd. Wykład 9: Programowanie aplikacji baz danych po stronie serwera. Sekwencje Wyzwalacze

Bazy Danych i Usługi Sieciowe

Plan. Formularz i jego typy. Tworzenie formularza. Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza

Przestrzenne bazy danych Podstawy języka SQL

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Bazy danych i strony WWW

Bloki anonimowe w PL/SQL

Obiektowe bazy danych Ćwiczenia laboratoryjne (?)

Monika Kruk Mariusz Grabowski. Informatyka Stosowana WFiIS, AGH 13 grudzień 2006

Transkrypt:

Plan wykładu Spis treści 1 Wprowadzenie do bloków nazwanych 1 2 Parametry 2 3 Procedury i funkcje 3 4 Pakiety 6 5 Podsumowanie 10 6 Źródła 10 1 Wprowadzenie do bloków nazwanych Rodzaje bloków w PL/SQL Bloki anonimowe Bloki nazwane: procedury, funkcje, pakiety, wyzwalacze - procedury wyzwalane. Cechy bloków anonimowych Cechy bloków anonimowych: kompilowane przy każdym ich użyciu, nie są przechowywane w systemie bazodanowym, nie można ich wywołać z poziomu innej aplikacji, w sposób jawny nie mogą zwracać żadnej wartości, nie mogą przyjmować żadnych parametrów. Cechy bloków nazwanych Cechy bloków nazwanych: kompilowane tylko raz, w postaci skompilowanej trwale przechowywane przez bazę, mogą być wywoływane przez inne aplikacje, funkcje obowiązkowo muszą zwracać wartości, procedury i funkcje mogą (nie muszą) przyjmować parametry, wykonywane na żądanie użytkownika lub w wyniku zajścia zdarzenia, 1

można wyróżnić dwie części: specyfikację i ciało, część deklaracyjna procedur, funkcji i pakietów nie rozpoczyna się od słowa kluczowego DECLARE. 2 Parametry Parametry Parametry: umożliwiają przekazywanie wartości między środowiskiem wywołującym a programem - w obie strony, w deklaracji programu występują parametry formalne, dla których nie podaje się rozmiaru typu, definicja parametru formalnego: nazwa [tryb] typ [{:= DEFAULT} wartosc] w wywołaniu programu występuje parametr aktualny, parametry aktualne mogą być: literałem, zmienną albo wyrażeniem. Tryby przekazania parametru IN (domyślnie) - parametr przekazuje stałą wartość ze środowiska wywołującego do procedury; parametr formalny traktowany wewnątrz procedury jak stała; parametr aktualny to literał, wyrażenie, stała lub zainicjowana zmienna; można mu przypisać domyślną wartość. OUT - przekazuje wartość z procedury do środowiska wywołującego; parametr aktualny musi być zmienną; wewnątrz procedury traktowany jako niezainicjowana zmienna; nie można przypisać mu domyślnej wartości. IN OUT - przekazuje wartość ze środowiska wywołującego do procedury i prawdopodobnie przekazuje inną wartość z procedury do środowiska wywołującego; parametr aktualny musi być zmienną; wewnątrz jest traktowany jak zainicjalizowana zmienna; nie można przypisać mu domyślnej wartości. Przekazywanie parametrów aktualnych - notacje Notacja pozycyjna (taka sama kolejność parametrów aktualnych jak parametrów formalnych): mojaprocedura(1, 2, 3); Notacja imienna (dowolna kolejność, używamy powiązania z nazwą parametru formalnego): mojaprocedura(p1 => 1, p3 => 3, p2 => 2); Notacja mieszana: mojaprocedura(1, p3 => 3, p2 => 2); 2

Wykorzystanie wartości domyślnych I Definiujemy domyślne wartości dla parametrów. Mamy elastyczność dzięki wykorzystaniu notacji pozycyjnej i imiennej w przekazywaniu argumentów aktualnych. Wartość domyślna przekazywana przez słowo kluczowe DEFAULT albo operator := CREATE OR REPLACE PROCEDURE dodaj (p1 NUMBER := 100, p2 NUMBER DEFAULT 200) IS p3 NUMBER; p3 := p1 + p2; DBMS_OUTPUT.PUT_LINE('Wynik: ' p3); / Wykorzystanie wartości domyślnych II EXECUTE dodaj; EXECUTE dodaj (); EXECUTE dodaj (p2 => 100); EXECUTE dodaj (1,2); EXECUTE dodaj (1); 3 Procedury i funkcje Tworzenie procedur CREATE [OR REPLACE] PROCEDURE nazwa [( par1 [ IN OUT IN OUT ] typ [, par2 [ IN OUT IN OUT ] typ,...] )] {IS AS} [deklaracje;] instrukcje; [EXCEPTION obsluga_wyjatkow;] END [nazwa]; Tworzenie procedur - przykład CREATE OR REPLACE PROCEDURE wyliczanka (p_ile NUMBER) AS v_iter NUMBER := 0; IF p_ile > 0 THEN FOR v_iter IN 1..p_ile LOOP dbms_output.put(v_iter); END LOOP; dbms_output.put_line(' '); wyliczanka(p_ile-1); END IF; END wyliczanka; 3

Inne operacje na procedurach Usuwanie procedury: DROP PROCEDURE wyliczanka; Wyświetlanie informacji o procedurze (nazwy parametrów, możliwa wartość NULL, typy parametrów): DESC[RIBE] wyliczanka; Kod procedury dostępny w perspektywach użytkownika: SELECT text FROM user_source WHERE name = 'WYLICZANKA' and type = 'PROCEDURE'; Wywołanie procedury wyliczanka(5); CALL wyliczanka(5); EXEC[UTE] wyliczanka(5); Tworzenie i wywoływanie procedur - przykład I CREATE OR REPLACE PROCEDURE WITAJ(imie VARCHAR2 DEFAULT 'Jan', wiek NUMBER := '12') AS DBMS_OUTPUT.PUT_LINE('Witaj ' imie '. Masz ' wiek ' lat.'); / EXECUTE WITAJ('Robert', 12); CALL WITAJ('Maria', 24); CALL WITAJ(imie=>'Maciek', wiek=>32); EXECUTE WITAJ(wiek=>89, imie=>'teresa'); EXEC WITAJ(imie=>'Michał'); EXEC WITAJ(wiek=>45); CALL WITAJ(); Tworzenie i wywoływanie procedur - przykład II CREATE OR REPLACE PROCEDURE placa_pracownika ( p_nr_akt IN pracownicy.nr_akt%type, p_nazwisko OUT pracownicy.nazwisko%type, p_placa OUT pracownicy.placa%type) IS SELECT nazwisko, placa INTO p_nazwisko, p_placa FROM pracownicy WHERE nr_akt = p_nr_akt; END placa_pracownika; / 4

Wywoływanie procedur DECLARE v_nazwisko pracownicy.nazwisko%type; v_placa pracownicy.placa%type; placa_pracownika(9120, v_nazwisko, v_placa); DBMS_OUTPUT.PUT_LINE('Pracownik ' v_nazwisko ' zarabia ' v_placa ); Tworzenie funkcji Pracownik RYBAK zarabia 1800 CREATE [OR REPLACE] FUNCTION nazwa [( par1 [ IN OUT IN OUT ] typ [, par2 [ IN OUT IN OUT ] typ,...] )] RETURN typ {IS AS} [deklaracje;] instrukcje; RETURN wyrazenie; [EXCEPTION obsluga_wyjatkow;] END [nazwa]; Tworzenie funkcji - przykład CREATE OR REPLACE FUNCTION mail (p_nr NUMBER) RETURN VARCHAR2 AS v_mail VARCHAR2(50); SELECT Lower(nazwisko) '@' Lower(nazwa) '.firma.pl' INTO v_mail FROM pracownicy NATURAL JOIN dzialy WHERE nr_akt = p_nr; RETURN v_mail; END mail; Wywołanie funkcji DECLARE v_mail VARCHAR2(50); v_mail := mail(9120); dbms_output.put_line(v_mail); 5

SELECT mail(nr_akt) FROM pracownicy; VARIABLE b_mail VARCHAR2(50); EXECUTE :b_mail := mail(9120); PRINT b_mail; Wywołanie funkcji użytkownika w SQL W klauzulach SELECT, ORDER BY, GROUP BY. W wyrażeniach warunkowych klauzul WHERE i HAVING. W klauzuli VALUES instrukcji INSERT. W klauzuli SET instrukcji UPDATE. Ograniczenia wywołania funkcji użytkownika w SQL Funkcje muszą być przechowywane w bazie danych. Używają tylko parametrów w trybie IN oraz typów danych dostępnych w SQL. Nie mogą zawierać parametrów o typach z PL/SQL. Zwracają poprawny typ danych z SQL (nie z języka PL/SQL). Funkcje wywoływane w zapytaniu SELECT nie moga zawierać instrukcji DML. Instrukcje UPDATE albo DELETE na tabeli T nie mogą wywoływać czy zawierać funkcji z operacjami DML na tej samej tabeli T. Zalety funkcji i procedur użytkownika Zwiększają bezpieczeństwo i integralność danych. Zwiększają wydajność. Zwiększają czytelność kodu. Potrafią rozszerzyć SQL w tych miejscach, gdzie czynności w SQL są zbyt złożone, skomplikowane albo wręcz niemożliwe do zrealizowania. Potrafią manipulować na danych. 4 Pakiety Pakiety Pakiet - zbiór logicznie powiązanych zmiennych, stałych, kursorów, wyjatków, procedur, funkcji, itp., tworzących jeden nazwany, przechowywany trwale w bazie obiekt. Składowe pakietu: specyfikacja (publiczny interfejs) - wszystkie deklaracje dostępne z zewnątrz pakietu dla innych aplikacji, ciało (prywatna implementacja) - ukryte, opcjonalne. 6

Zalety używania pakietów Budowa modułowa: hermetyzacja (kapsułkowanie) odpowiednich konstruktorów. Przechowywanie razem logicznie powiązanej funkcjonalności. Prostsze projektowanie i implementacja dzięki osobnej kompilacji specyfikacji i ciała pakietu. Ukrywanie informacji. Zwiększona funkcjonalność. Większa wydajność. Można przeciążać funkcje i procedury pakietu. Tworzenie pakietu Specyfikacja pakietu: CREATE [OR REPLACE] PACKAGE nazwa {IS AS} publiczne_deklaracje; specyfikacja_podprogramow; END [nazwa]; Ciało pakietu: CREATE [OR REPLACE] PACKAGE BODY nazwa {IS AS} prywatne_deklaracje; definicje_podprogramow; [ instrukcje_inicjalizujace;] END [nazwa]; Specyfikacja pakietu - przykład CREATE OR REPLACE PACKAGE PLACE AS FUNCTION suma RETURN NUMBER; FUNCTION suma_w_dziale(p_id NUMBER) RETURN NUMBER; FUNCTION srednia RETURN NUMBER; FUNCTION srednia_w_dziale(p_id NUMBER) RETURN NUMBER; PROCEDURE podwyzka(p_kwota NUMBER); PROCEDURE podwyzka_w_dziale(p_kwota NUMBER, p_id NUMBER); END PLACE; 7

Ciało pakietu - przykład CREATE OR REPLACE PACKAGE BODY PLACE AS FUNCTION suma RETURN NUMBER AS v_sum NUMBER; SELECT Sum(placa+Nvl(dod_funkcyjny,0)+Nvl(prowizja,0)) INTO v_sum FROM pracownicy; RETURN v_sum; END suma; FUNCTION suma_w_dziale(p_id NUMBER) RETURN NUMBER AS v_sum NUMBER; SELECT Sum(placa+Nvl(dod_funkcyjny,0)+Nvl(prowizja,0)) INTO v_sum FROM pracownicy WHERE id_dzialu = p_id; RETURN v_sum; END suma_w_dziale; FUNCTION srednia RETURN NUMBER AS v_ave NUMBER; SELECT Avg(placa) INTO v_ave FROM pracownicy; RETURN v_ave; END srednia;... END PLACE; Przeładowywanie nazw Pozwala na utworzenie dwóch lub więcej podprogramów (procedur lub funkcji) o tej samej nazwie. Wymaga, żeby parametry formalne podprogramu różniły się co do liczby, kolejności, albo rodziny typu. Dostarcza sposób na rozszerzenie funkcjonalności bez utraty istniejącego kodu. Wystarczy dodać parametr do istniejącego podprogramu. Przeładowanie nazw PROCEDURE podwyzka(p_kwota NUMBER) AS UPDATE pracownicy SET placa = placa + p_kwota; END podwyzka; PROCEDURE podwyzka(p_kwota NUMBER, p_komu NUMBER) AS UPDATE pracownicy SET placa = placa + p_kwota WHERE nr_akt = p_komu; END podwyzka; Korzystanie z pakietu dbms_output.put_line(place.suma()); SELECT id_dzialu, place.suma_w_dziale(id_dzialu) FROM pracownicy; 8

Usuwanie pakietu Usuwanie całego pakietu (specyfikacji i ciała): DROP PACKAGE PLACE; Usuwanie tylko ciała pakietu: DROP PACKAGE BODY PLACE; Przeglądanie pakietu Wyświetlenie specyfikacji i ciała pakietu PLACE: SELECT text FROM user_source WHERE name = 'PLACE' AND type = 'PACKAGE' ORDER BY line; SELECT text FROM user_source WHERE name = 'PLACE' AND type = 'PACKAGE BODY' ORDER BY line; Pakiety dostarczone przez Oracle Dostarczone razem z serwerem Oracle. Rozszerzają funkcjonalność bazy danych. Pozwalają na dostęp do niektórych cech SQL, które normalnie są zarezerwowawne dla PL/SQL. Przykładowe pakiety: DBMS_OUTPUT - pozwala na wysyłanie wiadomości z własnych podprogramów PL/SQL. Szczególnie przydatne w debugowaniu kodu. UTL_FILE - pozwala na odczyt i zapis w plikach tekstowych systemu operacyjnego. UTL_MAIL - pozwala na tworzenie i wysyłanie wiadomości email. DBMS_ALERT - pozwala na asynchroniczne informowanie o zdarzeniach bazy danych. DBMS_LOCK - udostępnia interfejs do usługi zarządzania blokadami Oracle (utworznie blokady, nadanie jej nazwy, zmiana jej rodzaju, usunięcie). HTF (hypertext functions), HTP (hypertext procedures) - pozwalają na generowanie znaczników HTML, np. HTF.ANCHOR generuje znacznik <a>. DBMS_SCHEDULER - umożliwia tworzenie harmonogramu i automatyczne uruchamianie bloków kodu PL/SQL, procedur składowanych i zwenętrznych czy innych programów wykonywalnych. 9

Fazy przetwarzania instrukcji SQL Parsowanie - sprawdzanie składni instrukcji i zatwierdzenie jej poprawności, sprawdzenie poprawności wszystkich referencji i posiadania dostatecznych uprawnień. Wiązanie - dołączenie do instrukcji wartości zmiennych dowiązanych, jeśli takie w niej występują. Wykonanie - ostatnia faza dla instrukcji nie zwracających danych. Pobranie - (dla zapytań) wybranie wierszy, które mają być zwracane, posortowanie ich i zwrócenie jeden po drugim. Dla wbudowanych instrukcji SQL parsowanie i wiązanie są wykonywane w czasie kompilacji. Dla dynamicznego SQLa wszystkie fazy są wykonywane w czasie działania programu. 5 Podsumowanie Podsumowanie PL/SQL umożliwia: definiowanie funkcji i procedur specyficznych dla danego projektu, zmniejszenie przesyłanych danych przez sieć poprzez przeniesienie części logiki biznesowej na stronę serwera i bazy danych, przenoszenie kodu pomiędzy różnymi platformami, tworzenie własnych i wykorzystanie istniejących pakietów i bibliotek. 6 Źródła Źródła W wykładzie wykorzystano materiały: http://www.techonthenet.com/oracle/ M. Lentner, Oracle 9i Kompletny podręcznik użytkownika, PJWSTK - W-wa, 2003 http://docs.oracle.com/cd/b28359_01/appdev.111/b28370/triggers.htm http://docs.oracle.com/cd/b28359_01/appdev.111/b28370/create_trigger. htm 10