BAZY DANYCH W APLIKACJACH SIECIOWYCH

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

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.

Deklarowanie kursora

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

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

Technologie baz danych WYKŁAD 7: Wyjątki

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

1. Wyzwalacze BD (ang. triggers)

Zaawansowane bazy danych i hurtownie danych semestr I

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

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

Oracle PL/SQL. Paweł Rajba.

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

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

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

PODSTAWY BAZ DANYCH 13. PL/SQL

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Oracle PL/SQL. Paweł Rajba.

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

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

Bazy danych, 4. wiczenia

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

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

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

Wyzwalacze TWORZENIE WYZWALACZY

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

Plan wykładu BAZY DANYCH II WYKŁAD 8. Wyzwalacze. Wyzwalacze

OBSŁUGA WYJĄTKÓW. Mechanizm języka PL/SQL. Wyjątki:

Pakiety podprogramów Dynamiczny SQL

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

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

Cele. Definiowanie wyzwalaczy

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)

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

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

PL/SQL. Zaawansowane tematy PL/SQL

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

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

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

Procedury i funkcje składowane

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

Język PL/SQL Pakiety podprogramów

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

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

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

Oracle Developer Suite. Budowa aplikacji użytkownika końcowego

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

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

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

Oracle11g: Programowanie w PL/SQL

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

Oracle PL/SQL. Paweł Rajba.

15. Funkcje i procedury składowane PL/SQL

Oracle PL/SQL. Paweł Rajba.

Delphi Laboratorium 3

1. ELEMENTY JĘZYKA PL/SQL

Koncepcja automatycznego tworzenia modu³u auditingu w aplikacjach u ytkowych

SQL 4 Structured Query Lenguage

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

BAZA DANYCH SIECI HOTELI

PL/SQL. Część 1 Bloki PL/SQL. Piotr Medoń

Administracja i programowanie pod Microsoft SQL Server 2000

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

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

Indeksy. Indeks typu B drzewo

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

Hurtownia Świętego Mikołaja projekt bazy danych

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

P o d s t a w y j ę z y k a S Q L

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

Bazy danych - Materiały do laboratoriów VIII

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

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

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

CREATE USER

Składowane procedury i funkcje

Bazy danych 6. Klucze obce. P. F. Góra

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Wyzwalacze (triggery) Przykład

Plan wykładu BAZY DANYCH II WYKŁAD 4. Co to jest kursor? Rodzaje kursorów

SQL DDL DML TECHNOLOGIE BAZ DANYCH. Wykład 5: Język DDL i DML. Małgorzata Krętowska

Oracle10g: Programowanie w PL/SQL

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

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

Trigger jest obiektem związanym z tablicą, który aktywuje się gdy do tablicy następuje odpowiednie zapytanie.

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

Plan wykładu BAZY DANYCH II WYKŁAD 5. Kolekcje. Tablice asocjacyjne Kolekcje Tablice asocjacyjne VARRAY Tablice zagnieżdżone

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

Oracle PL/SQL. Paweł Rajba.

Struktura bazy danych

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Bloki anonimowe w PL/SQL

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

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

Programowanie w SQL. definicja bloku instrukcji BEGIN...END, warunkowe wykonanie instrukcji IF...ELSE, wyrażenie CASE,

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

Podprogramy. Rozdział 11 Procedury i funkcje składowane

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

Efekty uboczne błędów

Transkrypt:

BAZY DANYCH W APLIKACJACH SIECIOWYCH Wykład 4 Wyjątki. Wyzwalacze bazodanowe. (Wybrane materiały) Dr inż. E. Busłowska Obsługa wyjątków w PLSQL Wyjątek (ang. Exception) - błąd lub ostrzeżenie w PLSQL Typy wyjątków: 1. Systemowe (predefiniowane) dzielenie przez zero brak wolnej pamięci brak praw do obiektu 2. Definiowane przez użytkownika za niskie zarobki za wysoka wartość zamówienia zbyt mała ilość książek 1 2 Kontrola obsługi wyjątku a NUMBER := 0; Obsługa wyjątków w PLSQL b NUMBER := 0; Wystąpienie błędu jest sygnalizowane przez wywołanie wyjątku. Błędy systemowe sygnalizowane są automatycznie Błędy definiowane przez użytkownika są wywoływane ręcznie za pomocą polecenia RAISE. Po wystąpieniu wyjątku kontrola przechodzi do procedury obsługi wyjątku (ang. exception handler). c NUMBER; a := 20; c := a b; WHEN NO_DATA_FOUND THEN INSERT INTO komunikat VALUES ( Brak danych, SYSDATE); Po jej wykonaniu kontrola przechodzi do kolejnego bloku nadrzędnego. SELECT ilosc INTO a FROM t_ksiazka; Jeśli procedura obsługi danego błędu nie zostanie znaleziona, to wykonywanie programu zostanie przerwane. WHEN ZERO_DIVIDE THEN INSERT INTO komunikat VALUES ( Dzielenie przez 0, SYSDATE); WHEN OTHERS THEN INSERT INTO komunikat VALUES ( Inny błąd, SYSDATE); 3 4 Wyjątki predefiniowane CURSOR_ALREADY_OPEN - wywoływany w przypadku próby otwarcia kursora już otwartego; DUP_VAL_ON_INDEX - wywoływany w przypadku próby wykonania rozkazu INSERT lub UPDATE, który spowodowałby utworzenie dwóch takich samych wierszy w indeksie zadeklarowanym jako UNIQUE; INVALID_CURSOR - wywoływany w przypadku próby dostępu do nieprawidłowego kursora (np. nie otwartego); INVALID_NUMBER - wywoływany w przypadku próby wykonania konwersji do typu numerycznego z tekstu, który nie reprezentuje liczby; NO_DATA_FOUND - wywoływany wtedy, gdy rozkaz SELECT powinien zwrócić jeden wiersz a nie zwraca żadnego (np. SELECT INTO); STORAGE_ERROR - wywoływany w przypadku braku wolnej pamięci lub uszkodzenia zawartości pamięci; TOO_MANY_ROWS - wywoływany w przypadku, gdy rozkaz SELECT zwraca więcej niż jeden wiersz, a oczekiwany jest tylko jeden (np. SELECT INTO); VALUE_ERROR - wywoływany w przypadku przypisania złej wartości do zmiennej lub pola; ZERO_DIVIDE - próba dzielenia przez zero; Budowa modułu obsługi wyjątków WHEN wyjątek1 THEN instrukcje [WHEN wyjątek2 THEN instrukcje ] [WHEN OTHERS THEN instrukcje ] 5 6 1

Przypisania tej samej akcji różnym wyjątkom Nazwy tych wyjątków wypisać w klauzuli WHEN oddzielając słowem OR: WHEN dane1 OR dane2 OR VALUE_ERROR THEN Nie można jednak użyć słowa OTHERS w takiej liście. Słowo OTHERS zawsze musi wystąpić oddzielnie. Należy pamiętać również, że dla jednego wyjątku może być zdefiniowana tylko jedna funkcja obsługi w danym bloku. W funkcjach obsługi wyjątków mają zastosowanie normalne reguły przesłaniania tzn. widoczne są tylko zmienne globalne lub lokalne. Definiowanie własnych wyjątków ; BRAK_DANYCH ; 7 8 Definiowanie własnych wyjątków Wywoływanie zdefiniowanych wyjątków przed użyciem wyjątek musi być zadeklarowany deklarowane w blokach deklaracji dowolnych bloków PLSQL wyjątek jest widoczny w danym bloku i wszystkich jego blokach podrzędnych wyjątek w języku PLSQL nie jest obiektem ale informacją o spełnieniu pewnych określonych warunków do wyjątku nie można przypisać żadnej wartości ani użyć wyjątku w jakiejkolwiek operacji arytmetycznej. wyjątek nie może być również używany w rozkazach SQL. nie jest możliwa deklaracja tego samego wyjątku dwa razy w tym samym bloku. Można jednak zadeklarować ten sam wyjątek w różnych blokach. wyjątki predefiniowane wywoływane są przez system automatycznie. wyjątki zdefiniowane przez użytkownika, muszą być przez niego wywołane v_l NUMBER := 0; v_isbn NUMBER := &isbn; ex_za_malo_ksiazek ; SELECT ilosc INTO v_l FROM t_ksiazka WHERE ISBN = v_isbn; IF (v_l < 3) THEN RAISE ex_za_malo_ksiazek; WHEN ex_za_malo_ksiazek THEN DBMS_OUTPUT.PUT_LINE('KSIĄŻEK O ISBN ' v_isbn ' JEST MNIEJ NIŻ 3!'); 9 10 Propagacja wyjątków Wywoływanie predefiniowanych wyjątków A Exception; B Exception; C Exception; RAISE C; WHEN A THEN WHEN A THEN Wyjątek C jest propagowany do bloku obejmującego, gdzie również nie ma żadnego programu obsługi tego wyjątku Użytkownik może wywoływać ręcznie zarówno błędy systemowe, jak i zdefiniowane przez siebie. Każdy wywołany błąd powinien zostać obsłużony przez odpowiednią procedurę obsługi wyjątku. Możliwe jest również jawne (za pomocą rozkazu RAISE) wywoływanie predefiniowanych wyjątków: RAISE INVALID_NUMBER; Czasami istnieje konieczność powtórnego wywołania wyjątku z funkcji, która go obsługuje, w celu przekazania go do bloku nadrzędnego. em może tu być wycofanie transakcji w bloku zagnieżdżonym i zgłoszenie informacji o błędzie w bloku nadrzędnym. W związku z tym możliwe jest użycie rozkazu RAISE w funkcji obsługi wyjątku. Należy pamiętać, że wyjątki zgłoszone w funkcji obsługi innego wyjątku są zawsze przekazywane do bloku nadrzędnego i tam wyszukiwana jest odpowiednia funkcja obsługi zgodnie z zasadami opisanymi wcześniej. Podobnie wyjątki zgłaszane w części deklaracyjnej przekazywane są do bloku nadrzędnego i tam podlegają przetwarzaniu. 11 12 2

Funkcje SQLCODE i SQLERRM Procedura RAISE_APPLICATION_ERROR Funkcja SQLCODE zwraca numer błędu, który wystąpił. Numer jest zawsze ujemny, za wyjątkiem błędu NO_DATA_FOUND (+100) i błędów definiowanych przez użytkownika (+1) Funkcja SQLERRM zwraca treść błędu, który wystąpił. Jeśli nie wystąpił żaden błąd to SQLCODE zwraca 0 a SQLERRM zwraca : ORA-0000: normal, successful completion err_num NUMBER; err_msg VARCHAR2(100); WHEN OTHERS THEN err_num := SQLCODE; err_msg := SUBSTR(SQLERRM, 1, 200); INSERT INTO errors VALUES (err_num, err_msg); Pozwala użytkownikowi określić błąd aplikacji, przypisać mu kod SQLCODE z przedziału 20000 20999 oraz wygenerować niestandardowy komunikat błędu RAISE_APPLICATION_ERROR(numer_błędu, komunikat, [, TRUE FALSE ] ) numer_błędu - liczba ujemna z przedziału <20000 20999> komunikat - łańcuch znaków o rozmiarze do 2048 bajtów TRUE, FALSE: czy błąd ma być umieszczony na szczycie stosu błędów, czy też ma je zastąpić FOR ks_re IN ( SELECT * FROM t_ksiazka ) LOOP IF (ks_re.cena < 25 ) THEN RAISE_APPLICATION_ERROR(-20101, 'Uwaga, tania ksiazka!!!'); ELSE DBMS_OUTPUT.PUT_LINE('Cena ksiażki: ' ks_re.cena); END LOOP; END ; 13 14 Składnia wyzwalacza bazy danych Możliwe typy wyzwalaczy CREATE [OR REPLACE] TRIGGER nazwa_wyzwalacza {BEFORE AFTER} zdarzenie_wywołujące ON nazwa_tabeli [REFERENCING {NEW AS OLD AS} nazwa_kwalifikatora] [] [WHEN (wyrażenie)] [ Opcjonalna sekcja deklaracji zawiera wszystkie lokalne typy, zmienne, stałe, kursory i deklaracje podprogramów] Sekcja poleceń wyzwalacza [ Opcjonalna sekcja wyjątków służąca do obsługi błędów] 15 BEFORE INSERT BEFORE INSERT AFTER INSERT AFTER INSERT BEFORE UPDATE BEFORE UPDATE AFTER UPDATE AFTER UPDATE BEFORE DELETE BEFORE DELETE AFTER DELETE AFTER DELETE 16 Kolejność wykonywania wyzwalaczy CREATE OR REPLACE TRIGGER trig_stanow BEFORE UPDATE OF idstanowiska ON Stanowiska UPDATE Pracownicy SET idstanowiska = 3 WHERE idstanowiska = 6; 1. Wyzwalacz przed instrukcją; 2. Wyzwalacz przed pierwszym wierszem, na którym operuje instrukcja 3. Wyzwalacz po pierwszym wierszu, na którym operuje instrukcja 4. Wyzwalacz przed ostatnim wierszem 5. Wyzwalacz po ostatnim wierszu 6. Wyzwalacz po instrukcji 17 18 3

Odróżnianie wartości w wierszu 1. : OLD - wiersz przed zmianą 2. : NEW - wiersz po zmianie Na przykład: IF :NEW.wartość < :OLD.wartość CREATE OR REPLACE TRIGGER trig_klienci BEFORE UPDATE OF idklienta ON Klienci UPDATE umowy SET idklienta = :new.idklienta WHERE idklienta = :old.idklienta; 19 20 Zmienne systemowe informujące o typie operacji INSERTING - wyzwalacz uruchomiony dla INSERT DELETING - wyzwalacz uruchomiony dla DELETE UPDATING[(kol,)] - wyzwalacz uruchomiony dla UPDATE [i kolumny kol,] 21 CREATE OR REPLACE TRIGGER US_KAS_WP_MOD BEFORE DELETE OR UPDATE OR INSERT ON KLIENT IF DELETING THEN DELETE FROM ODDZIAL WHERE KL_NO= :OLD.KL_NO; ELSIF UPDATING THEN UPDATE ODDZIAL SET KL_NO = :NEW.KL_NO WHERE KL_NO= :OLD.KL_NO; ELSIF INSERTING THEN DBMS_OUTPUT.PUT_LINE('NOWA WARTOSC NAZWISKA:' :NEW.KL_NAZ); 22 Operacje na wyzwalaczach włączaniewyłączanie wyzwalacza ALTER TRIGGER nazwa_wyzwalacza [ENABLE DISABLE] Usuwanie wyzwalacza DROP TRIGGER nazwa_wyzwalacza Perspektywa User_triggers SELECT Trigger_type, Table_name, Triggering_event FROM User_triggers WHERE Trigger_name = 'WYZWALACZ'; lub SELECT Trigger_body FROM User_triggers WHERE Trigger_name = 'WYZWALACZ'; 23 24 4

Wyzwalacz INSTEAD OF Wyzwalacze systemowe CREATE OR REPLACE TRIGGER TRIG_P_DOSTAW INSTEAD OF INSERT ON P_DOSTAWCA V_dost dostawca.id_dostawcy%type; SELECT ID_dostawcy INTO V_dost FROM dostawca WHERE NAZWA =:NEW.NAZWA; INSERT INTO KSIAZKA (ISBN,TYTUL,dostawca) VALUES (:NEW.ISBN,:NEW.TYTUL,V_dost); BEFORE LOGON BEFORE CREATE BEFORE ALTER BEFORE DROP BEFORE AUDIT BEFORE NOAUDIT BEFORE DDL BEFORE GRANT BEFORE RENAME BEFORE REVOKE AFTER LOGON AFTER CREATE AFTER ALTER AFTER DROP AFTER AUDIT AFTER NOAUDIT AFTER DDL AFTER GRANT AFTER RENAME AFTER REVOKE 25 26 5