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.

Podobne dokumenty
Deklarowanie kursora

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

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 składowane. Funkcje vs. procedury Funkcja. Procedura. zazwyczaj ma parametry tylko typu IN; można wywoływać z poziomu

BAZY DANYCH W APLIKACJACH SIECIOWYCH

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

Oracle PL/SQL. Paweł Rajba.

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

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

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

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

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

DECLARE VARIABLE zmienna1 typ danych; BEGIN

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

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

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

Ćwiczenie 12 PL/SQL. Język PL/SQL kursory i wyjątki

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

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

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

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

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

Delphi Laboratorium 3

15. Funkcje i procedury składowane PL/SQL

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

Procedury i funkcje składowane

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

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

PL/SQL co, gdzie i dlaczego?

Pakiety podprogramów Dynamiczny SQL

PL/SQL. Zaawansowane tematy PL/SQL

Podprogramy. Rozdział 11 Procedury i funkcje składowane

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

Język PL/SQL Pakiety podprogramów

Bloki anonimowe w PL/SQL

1. Wyzwalacze BD (ang. triggers)

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

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

PODSTAWY BAZ DANYCH 13. PL/SQL

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

Oracle PL/SQL. Paweł Rajba.

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

Zaawansowane bazy danych i hurtownie danych semestr I

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

PL/SQL. Ćwicznia 2. Ćwiczenia 3

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

Podstawowe właściwości języka PL/SQL

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

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

Efekty uboczne błędów

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

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

Indeksy. Indeks typu B drzewo

Multimedialne bazy danych - laboratorium

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

Oracle PL/SQL. Paweł Rajba.

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

Wyjątki - wprowadzenie

1. ELEMENTY JĘZYKA PL/SQL

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

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

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

PL/SQL. Zaawansowane tematy PL/SQL

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

Visual Basic Debugging and Error Handling

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

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

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

Celem ćwiczenia jest wprowadzeniem do programowaniu w języku PL/SQL. Język PL/SQL umoŝliwia tworzenie programów, przetwarzających dane w bazie danych.

Tabele wykorzystywane w przykładach

Obiektowe bazy danych Ćwiczenia laboratoryjne (?)

Kursory - pobieranie danych z baz danych do programów PL/SQL

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

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

Platforma.NET laboratorium 4 Aktualizacja: 15/11/2013. Visual Basic.NET dostęp do bazy danych. Baza Microsoft SQL Server Compact

Ada-95. Dariusz Wawrzyniak

Wyjątki (exceptions)

Oracle11g: Programowanie w PL/SQL

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

Obsługa błędów w SQL i transakcje. Obsługa błędów w SQL

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Kursory. A. Pankowska 1

Klasyfikacja wyjątków

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

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

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

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

Oracle PL/SQL. Paweł Rajba.

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Architektura. PL SQL programowanie A.Klusiewicz

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

Wykład 8: Obsługa Wyjątków

ZASTOSOWANIE PROCEDUR, FUNKCJI I PAKIETÓW

Ćwiczenie 11 PL/SQL. Wprowadzenie do języka PL/SQL

BAZA DANYCH SIECI HOTELI

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

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

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

Transkrypt:

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. 1

Komunikaty o błędach serwera Oracle Wykonanie niepoprawnej operacji w trakcie działania programu PL/SQL powoduje wygenerowanie błędu. Jeśli błąd nie zostanie obsłużony przez programistę, kończy działanie programu a na konsoli wyświetlany jest odpowiedni komunikat. Komunikat zawiera: prefiks określający produkt, którego dotyczy błąd (np. ORA), numer błędu, opis błędu. 2

Komunikaty o błędach serwera Oracle - przykłady Przykładowe komunikaty: ORA-00001 naruszenie klucza podstawowego lub klucza unikalnego podczas definiowania/modyfikowania rekordu, ORA-02292 naruszenie klucza obcego podczas usuwania rekordu, ORA-01476 próba wykonania operacji dzielenia z dzielnikiem równym 0. 3

Procedura RAISE_APPLICATION_ERROR Umożliwia programiście zakończenie działania programu z wyświetleniem własnego komunikatu o błędzie. Parametry wywołania: numer błędu z przedziału od -20999 do -20000, komunikat. DECLARE CURSOR c_prac IS FOR prac_record IN c_prac LOOP IF (prac_record.placa_pod < 300 ) THEN RAISE_APPLICATION_ERROR(-20010, 'Pracownik ze zbyt niską pensją!'); ELSE END IF; END LOOP; 4

Obsługa błędu wykonania programu PL/SQL Z każdym błędem wykonania polecenia SQL lub programu PL/SQL związany jest wewnętrznie zdefiniowany wyjątek(ang. exception). wyjątek jest zgłaszany automatycznie przez system w momencie wystąpienia błędu wykonania, wyjątek może być przechwycony i obsłużony przez program PL/SQL. Niektóre z wewnętrznie zdefiniowanych wyjątków mają przypisane nazwy, są to tzw. wyjątki predefiniowane; przykłady: NO_DATA_FOUND, TOO_MANY_ROWS, ZERO_DIVIDE. wewnętrzne wyjątki bez nazw to tzw. wyjątki anonimowe. Użytkownik może zdefiniować swoje własne wyjątki, tzw. wyjątki użytkownika: wymagają zadeklarowania w programie przez użytkownika, najczęściej wywoływane ręcznie za pomocą polecenia RAISE, możliwe jest związanie wyjątku użytkownika z błędem wykonania. 5

Sekcja w bloku PL/SQL Umożliwia zdefiniowanie w programie kodu reagującego na wystąpienie błędów wykonania. Składa się z podsekcji, każda podsekcja reaguje najczęściej na jeden błąd (jednak możliwa jest również obsługa wielu błędów w jednej sekcji). Błąd, obsługiwany w podsekcji, wskazuje się przez podanie nazwy związanego z nim wyjątku. Podsekcja WHEN OTHERS obsługuje wszystkie niewymienione błędy, sekcja opcjonalna. DECLARE WHEN <wyjątek_1> THEN sekwencja poleceń WHEN <wyjątek_2> THEN sekwencja poleceń WHEN <wyjątek_3> OR <wyjątek_4> THEN sekwencja poleceń WHEN OTHERS THEN sekwencja poleceń 6

Propagacja obsługi wyjątku --wyjątek A --wyjątek B --wyjątek C WHEN A THEN WHEN A THEN WHEN A THEN WHEN B THEN WHEN B THEN WHEN B THEN BŁĄD 7

Wyjątki predefiniowane Nazwa wyjątku Numer błędu Wartość SQLCODE CURSOR_ALREADY_OPEN ORA-06511-6511 DUP_VAL_ON_INDEX ORA-00001-1 INVALID_CURSOR ORA-01001-1001 INVALID_NUMBER ORA-01722-1722 LOGIN_DENIED ORA-01017-1017 NO_DATA_FOUND ORA-01403 100 NOT_LOGGED_ON ORA-01012-1012 PROGRAM_ERROR ORA-06501-6501 STORAGE_ERROR ORA-06500-6500 TIMEOUT_ON_RESOURCE ORA-00051-51 TOO_MANY_ROWS ORA-01422-1422 VALUE_ERROR ORA-06502-6502 ZERO_DIVIDE ORA-01476-1476 8

Wyjątki predefiniowane przykład DECLARE v_id_zesp zespoly.id_zesp%type; v_nazwa zespoly.nazwa%type := '&nazwa'; SELECT id_zesp INTO v_id_zesp FROM zespoly WHERE nazwa = v_nazwa; DBMS_OUTPUT.PUT_LINE('Pracownicy z zespole ' v_nazwa); FOR prac IN (SELECT nazwisko FROM pracownicy WHERE id_zesp = v_id_zesp ORDER BY nazwisko) LOOP DBMS_OUTPUT.PUT_LINE(prac.nazwisko); END LOOP; WHEN no_data_found THEN DBMS_OUTPUT.PUT_LINE('Nie istnieje zespół o nazwie ' v_nazwa); 9

Funkcje SQLCODE i SQLERRM Służą do identyfikacji błędu. SQLCODE zwraca numer błędu, który wystąpił. numer ujemny, jedyne wartości dodatnie to: 100 dla wyjątku NO_DATA_FOUND i 1 dla wyjątków użytkownika. SQLERRM zwraca komunikat błędu, który wystąpił. Funkcje wykonane w sytuacji braku błędu zwracają: SQLCODE: 0 SQLERRM: ORA-0000: normal, successful completion Najczęściej stosowane w podsekcji WHEN OTHERS. WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Wystąpił błąd numer: ' SQLCODE); DBMS_OUTPUT.PUT_LINE(SQLERRM); 10

Wyjątki użytkownika Najczęściej służą do przekazania do środowiska wywołującego informacji, że w programie wystąpiła jakaś sytuacja błędna. rozwiązanie alternatywne dla procedury RAISE_APPLICATION_ERROR. Muszą zostać jawnie zadeklarowane. DECLARE v_liczba NUMBER := 0; ex_moj_wyjatek ; Wywoływane z użyciem polecenia RAISE. Wywołanie wyjątku przerywa działanie programu, system przystępuje do wyszukiwania procedury obsługi wyjątku (w identyczny sposób jak dla wyjątków predefiniowanych). RAISE ex_moj_wyjatek; 11

Wyjątki użytkownika przykład DECLARE v_id_zesp zespoly.id_zesp%type := &zespol; v_liczba INTEGER; ex_pracownicy_w_zespole ; SELECT COUNT(*) INTO v_liczba FROM pracownicy WHERE id_zesp = v_id_zesp; IF (v_liczba > 0) THEN RAISE ex_pracownicy_w_zespole; END IF; DELETE FROM zespoly WHERE id_zesp = v_id_zesp; DBMS_OUTPUT.PUT_LINE('Zespół został usunięty!'); WHEN ex_pracownicy_w_zespole THEN DBMS_OUTPUT.PUT_LINE('Do zespołu są przypisani pracownicy. Usunięcie anulowane!'); 12

Wyjątek użytk. związany z błędem systemowym Istnieje możliwość związania wyjątku użytkownika z błędem systemowym (tj. błędem identyfikowanym przez numer, np. ORA- 02292). Stosowane, gdy w programie chcemy obsłużyć błąd systemowy, dla którego nie istnieje wyjątek predefiniowany. Powiązanie realizowane przez użycie dyrektywy kompilatora INIT: PRAGMA _INIT(wyjątek_użytkownika, numer_błędu_sys); wyjątek użytkownika musi zostać wcześniej zadeklarowany. 13

Przykład Związanie błędu ORA-2292 z wyjątkiem użytkownika. DECLARE v_id_zesp zespoly.id_zesp%type := &zespol; ex_pracownicy_w_zespole ; PRAGMA _INIT(ex_pracownicy_w_zespole, -2292); DELETE FROM zespoly WHERE id_zesp = v_id_zesp; DBMS_OUTPUT.PUT_LINE('Zespół został usunięty!'); WHEN ex_pracownicy_w_zespole THEN DBMS_OUTPUT.PUT_LINE('Do zespołu są przypisani pracownicy. Usunięcie anulowane!'); 14

Wiadomości uzupełniające 15

Wyświetlenie stosu błędów Funkcja DBMS_UTILITY.FORMAT_ERROR_STACK Zwraca zawartość aktualnego stosu błędów Wykorzystywana najczęście w sytuacji śledzenia błędów wygenerowanych w kodzie (procedurze, funkcji, itd.), wywołanym z innego kodu DECLARE Q WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_STACK); 16