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

Podobne dokumenty
Procedury i funkcje składowane

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

Podprogramy. Rozdział 11 Procedury i funkcje składowane

Pakiety podprogramów Dynamiczny SQL

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

Język PL/SQL Pakiety podprogramów

Oracle PL/SQL. Paweł Rajba.

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

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

Zaawansowane bazy danych i hurtownie danych semestr I

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

PODSTAWY BAZ DANYCH 13. PL/SQL

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

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

PL/SQL. Zaawansowane tematy PL/SQL

ZASTOSOWANIE PROCEDUR, FUNKCJI I PAKIETÓW

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

15. Funkcje i procedury składowane PL/SQL

Bloki anonimowe w PL/SQL

PL/SQL. Zaawansowane tematy PL/SQL

Procedury Funkcje Pakiety. Tworzenie procedury

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

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

Składowane procedury i funkcje

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

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

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

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

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

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

Deklarowanie kursora

Bazy danych, 4. wiczenia

DECLARE VARIABLE zmienna1 typ danych; BEGIN

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

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

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

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

Oracle11g: Programowanie w PL/SQL

SQL 4 Structured Query Lenguage

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

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

BAZA DANYCH SIECI HOTELI

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

Oracle PL/SQL. Paweł Rajba.

Oracle10g: Programowanie w PL/SQL

Oracle PL/SQL. Paweł Rajba.

1. ELEMENTY JĘZYKA PL/SQL

Deklarowanie kursora. CURSOR nazwa [ ( param1 typ1 [,param2 typ2]... ) ] [RETURN typ zwracany] IS zapytanie SQL;

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

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

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

1. Wyzwalacze BD (ang. triggers)

Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne, perspektywy wbudowane.

Kursory. A. Pankowska 1

Bloki anonimowe w PL/SQL

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

Tabele wykorzystywane w przykładach

Język PL/SQL. Rozdział 3. Obsługa błędów wykonania Wyjątki predefiniowane i użytkownika, zgłaszanie i obsługa wyjątków.

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

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

Ćwiczenia 2 IBM DB2 Data Studio

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

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

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

Oracle PL/SQL. Paweł Rajba.

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

Tworzenie widoku CREATE OR REPLACE VIEW [nazwa_widoku] AS SELECT [nazwy_kolumn] FROM [nazwa_tablicy];

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

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

Indeksy. Indeks typu B drzewo

Procedury wyzwalane. Rozdział 13. Procedury wyzwalane. Cele stosowania procedur wyzwalanych. Definiowanie procedury wyzwalanej DML

Język PL/SQL. Rozdział 6. Procedury wyzwalane

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

Obiektowe bazy danych Ćwiczenia laboratoryjne (?)

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

Hurtownia Świętego Mikołaja projekt bazy danych

Struktura bazy danych

Plan wykładu BAZY DANYCH II WYKŁAD 6. Co to są wyjątki? Co to są wyjątki?

PL/SQL. Lidia Małkiewicz i Cezary Skubała

Plan wykładu PL/SQL. PL/SQL - historia TWORZENIE APLIKACJI BAZODANOWYCH

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

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

Zaawansowane bazy danych i hurtownie danych semestr I, st. niestacjonarne

Bazy Danych i Usługi Sieciowe

Systemowe aspekty baz

Plan ćwiczenia. Rozdział 16 Uwierzytelnianie i autoryzacja w bazie danych. Użytkownicy i schematy (1) Użytkownicy i schematy (2) baza danych: ZESP99

Multimedialne bazy danych - laboratorium

Instrukcja instalacji aplikacji PlanSoft.org

W PostgreSQL mamy do dyspozycji nie tylko funkcje wbudowane, ale również możemy tworzyć własne. Są one zapisywane w tabeli systemowej pg_proc.

Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu):

Systemowe aspekty baz danych

Wykład V. Indeksy. Struktura indeksu składa się z rekordów o dwóch polach

Język PL/SQL Wprowadzenie

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

SQL w języku PL/SQL. 2) Instrukcje języka definicji danych DDL DROP, CREATE, ALTER, GRANT, REVOKE

Zaawansowane bazy danych i hurtownie danych semestr I

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

Język SQL. Rozdział 8. Język manipulowania danymi DML

Transkrypt:

Język PL/SQL Procedury i funkcje składowane Podprogramy, procedury i funkcje składowane, typy argumentów, wywoływanie procedur i funkcji, poziomy czystości funkcji 1

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): są trwale przechowywane w bazie danych w postaci zarówno skompilowanej jak i źródłowej, dzięki postaci skompilowanej osiągają większą szybkość działania niż kod wykonywany ad-hoc (bloki anonimowe), mogą być współdzielone przez wielu użytkowników. Zalety: rozszerzalność modularność łatwość pielęgnowania kodu możliwość wielokrotnego użycia kodu ukrycie szczegółów implementacji 2

Definiowanie procedury CREATE [OR REPLACE] PROCEDURE nazwa_procedury [ (argument,...) ] IS BEGIN...... END [nazwa_procedury]; specyfikacja deklaracje stałych, zmiennych, kursorów,... ciało - polecenia PL/SQL i SQL 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 3

Parametry procedur i funkcji nazwa [ IN OUT IN OUT ] typ [ DEFAULT wartość ] na liście parametrów podajemy tylko typ parametru (nie podajemy rozmiaru), parametr formalny: używany w deklaracji procedury i w części wykonywalnej PL/SQL, parametr aktualny: używany przy wywoływaniu procedury. IN OUT IN OUT Wartość przekazywana do programu przez referencję W programie zachowuje się jak stała Wartość zwracana do środowiska przez kopiowanie W programie zachowuje się jak nie zainicjalizowana zmienna Wartość przekazywana do programu i zwracana do środowiska przez kopiowanie W programie zachowuje się jak zainicjalizowana zmienna Musi być literałem, wyrażeniem, stałą lub zmienną Musi być zmienną Musi być zmienną 4

Przykład procedury CREATE OR REPLACE PROCEDURE sprawdz_asystentow ( BEGIN p_id_zesp IN NUMBER, p_ilu_asystentow OUT NUMBER) IS SELECT COUNT(*) INTO p_ilu_asystentow FROM pracownicy WHERE id_zesp = p_id_zesp AND etat = 'ASYSTENT'; IF p_ilu_asystentow > 0 THEN ELSE DBMS_OUTPUT.PUT_LINE('Asystenci zespołu ' to_char(p_id_zesp) ':'); FOR cur_rec IN (SELECT * FROM pracownicy WHERE id_zesp = p_id_zesp AND etat = 'ASYSTENT' ORDER BY nazwisko) LOOP DBMS_OUTPUT.PUT_LINE(cur_rec.nazwisko); END LOOP; DBMS_OUTPUT.PUT_LINE('W zespole ' p_id_zesp ' nie ma asystentów!'); END IF; END sprawdz_asystentow; 5

Definiowanie funkcji CREATE [OR REPLACE] FUNCTION nazwa_funkcji [ (argument,...) ] RETURN typ IS BEGIN......... END [nazwa_funkcji]; typ zwracany specyfikacja deklaracje stałych, zmiennych, kursorów,... ciało - polecenia PL/SQL i SQL 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 6

Przykład funkcji CREATE OR REPLACE FUNCTION podatek (p_id_prac IN NUMBER) RETURN NUMBER IS CURSOR c_pracownik IS SELECT * FROM pracownicy WHERE id_prac = p_id_prac; v_pracownik pracownicy%rowtype; v_roczne_zarobki NUMBER; v_podatek NUMBER; BEGIN OPEN c_pracownik; FETCH c_pracownik INTO v_pracownik; CLOSE c_pracownik; v_roczne_zarobki := 12 * v_pracownik.placa_pod + NVL(v_pracownik.placa_dod, 0); IF (v_roczne_zarobki > 5000) THEN v_podatek := 0.40 * v_roczne_zarobki; ELSIF (v_roczne_zarobki > 3000) THEN v_podatek := 0.30 * v_roczne_zarobki; ELSE v_podatek := 0.19 * v_roczne_zarobki; END IF; RETURN v_podatek; END podatek; 7

Wyświetlanie informacji o błędach w narzędziu isql*plus show errors bezpośrednio ze słownika bazy danych SELECT * FROM user_errors WHERE name = 'SPRAWDZ_ASYSTENTOW'; 8

Wywołanie procedur i funkcji (SQL*Plus) VARIABLE liczba_asystentow NUMBER VARIABLE kwota_podatku NUMBER zmienne deklarowane w środowisku SQL*Plus execute SPRAWDZ_ASYSTENTOW (20, :liczba_asystentow); execute :kwota_podatku := PODATEK(100); PRINT liczba_asystentow PRINT kwota_podatku wyświetlanie zawartości zmiennych 9

Wywołanie procedur i funkcji (PL/SQL) DECLARE liczba_asystentow NUMBER; kwota_podatku NUMBER; BEGIN SPRAWDZ_ASYSTENTOW (20, liczba_asystentow); kwota_podatku := PODATEK(100); END; Wywołanie funkcji (SQL) SELECT PODATEK(id_prac) FROM pracownicy; UWAGA: wołanie funkcji z poziomu SQL jest możliwe tylko wtedy gdy funkcja posiada odpowiedni poziom czystości 10

Czystość funkcji Aby funkcja mogła być wywoływana z poziomu polecenia SQL, musi posiadać odpowiedni poziom czystości: funkcja wywoływana z polecenia SELECT nie może modyfikować danych relacji bazy danych, funkcja wywoływana z poleceń INSERT, UPDATE i DELETE nie może odczytywać i modyfikować danych relacji, której dotyczy polecenie, funkcja wywoływana z poleceń SELECT, INSERT, UPDATE i DELETE nie może zawierać poleceń sterujących sesją i transakcjami (np. COMMIT, ALTER SESSION) oraz instrukcji DDL. 11

Kompilowanie procedury lub funkcji ALTER PROCEDURE FUNCTION nazwa COMPILE; Usuwanie procedury lub funkcji DROP PROCEDURE FUNCTION nazwa; 12

Słownik bazy danych USER_OBJECTS informacja o obiektach w schemacie użytkownika SELECT object_name, object_type, status FROM user_objects WHERE object_type IN ('PROCEDURE','FUNCTION'); USER_SOURCE kod źródłowy procedur i funkcji użytkownika SELECT text FROM WHERE ORDER BY line; user_source name = 'SPRAWDZ_ASYSTENTOW' 13