Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

PL/SQL(2)M. Rakowski - WSISiZ1 PL/SQL Zajęcia nr II.

Podobne prezentacje


Prezentacja na temat: "PL/SQL(2)M. Rakowski - WSISiZ1 PL/SQL Zajęcia nr II."— Zapis prezentacji:

1 PL/SQL(2)M. Rakowski - WSISiZ1 PL/SQL Zajęcia nr II

2 PL/SQL(2)M. Rakowski - WSISiZ2 Obsługa wyjątków Wyjątkiem w PL/SQL jest spełnienie warunków wystąpienia sytuacji nieprawidłowej, w której ciąg instrukcji nie jest dalej realizowany, ale realizacja przechodzi do odpowiedniego miejsca bloku PL/SQL w klauzuli EXCEPTION lub sytuacja zgłaszana jest jako błąd środowisku wywołującemu. Wyjątki dzielą się na predefiniowane i definiowane przez użytkownika. Przykładami wyjątków predefiniowanych mogą być: "NO_DATA_FOUND" lub "TOO_MANY_ROWS". W języku PL/SQL użytkownik może definiować wyjątki w części deklaracyjnej bloku PL/SQL oraz wiązać błędy PL/SQL ze zdefiniowanymi wyjątkami.

3 PL/SQL(2)M. Rakowski - WSISiZ3 Wyjątki predefiniowane CURSOR_ALREADY_OPEN - wywoływany w przypadku próby otwarcia kursora już otwartego; 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) oraz wskazaniu nieokreślonej komórki tablicy PL/SQL ; 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; Wyjątki (jako obsługa poszczególnych błędów) są definiowane w pakiecie STANDARD Klauzula OTHERS nie jest specyfikowanym wyjątkiem, ale sekcją obsługi dowolnego wyjątku

4 PL/SQL(2)M. Rakowski - WSISiZ4 Przykład obsługi wyjątku DECLARE x NUMBER := 1; y NUMBER := 1; BEGIN DBMS_OUTPUT.PUT_LINE( x/y ); DBMS_OUTPUT.PUT_LINE( Dalsze wykonanie); EXCEPTION WHEN ZERO_DIVIDE THEN DBMS_OUTPUT.PUT_LINE( y wyniosło zero!!!); END; Zadanie: Wykonać kod jak powyżej, następnie zmienić y na 0 i wykonać, a następnie objąć komentarzem całą sekcję obsługi wyjątku ( /*.. */ lub każdą linię --) i wykonać

5 PL/SQL(2)M. Rakowski - WSISiZ5 Definiowanie własnych wyjątków Definiowanie w sekcji deklaracyjnej bloku PL/SQL własnego wyjątku DECLARE ex_koniec EXCEPTION; BEGIN Wiązanie błędu ze zdefiniowanym wyjątkiem DECLARE ex_zly_miesiac EXCEPTION ; PRAGMA EXCEPTION_INIT(ex_zly_miesiac, ); BEGIN DBMS_OUTPUT.PUT_LINE( to_date( ' ', 'dd-mm-yyyy') ); EXCEPTION WHEN ex_zly_miesiac THEN DBMS_OUTPUT.PUT_LINE( 'to zły miesiąc był..' ); END; Zadanie: analogicznie zbudować obsługę złej specyfikacji dnia

6 PL/SQL(2)M. Rakowski - WSISiZ6 Wykorzystanie wyjątków Standaryzacja struktur oprogramowania (jedno miejsce obsługi wyjątku dla bloku, specyficzne wykorzystanie jako instrukcji sterującej - warunkowej) Komunikacja błędów w modelu klient serwer (przekazywanie komunikatu błędu oprogramowaniu wywołującemu operację) Raise_Application_Error( numer_bledu, tekst_opisu_bledu ) ; Gdzie: numer_bledu – (dla uniknięcia konfliktu) tekst_opisu_bledu – ciąg znaków do 2048 znaków

7 PL/SQL(2)M. Rakowski - WSISiZ7 Schemat zastosowania wyjątku w aplikacji klienckiej BEGIN … IF b_nie_znaleziono_stawek THEN RAISE_APPLICATION_ERROR(-20101, Brak aktualnych stawek'); END IF; … END; DECLARE ex_brak_stawek EXCEPTION; PRAGMA EXCEPTION_INIT( ex_brak_stawek, ); BEGIN … Operacja(…); … EXCEPTION WHEN ex_brak_stawek THEN Zapisz_Blad (SQLERRM); END; Operacja na serwerze Kod oprogramowania klienckiego

8 PL/SQL(2)M. Rakowski - WSISiZ8 Instrukcje warunkowe; IF Składnia: IF warunek THEN ciąg instrukcji [ ELSIF warunek THEN ciąg instrukcji ] * [ ELSE ciąg instrukcji ] END IF; Gdzie: warunek może się składać z ciągu warunków lub wartości logicznych (również uzyskiwanych funkcjami) połączonych spójnikami *- oznacza możliwą wielokrotność ciąg instrukcji oznacza jedną lub więcej instrukcję PL/SQL

9 PL/SQL(2)M. Rakowski - WSISiZ9 Instrukcje warunkowe: CASE Składnia: Wersja 1: CASE element_sprawdzany [ WHEN wartość THEN ciąg instrukcji ] 1 * [ ELSE ciąg instrukcji ]! END CASE; Wersja 2: CASE [ WHEN warunek THEN ciąg instrukcji ] 1 * [ ELSE ciąg instrukcji ]! END CASE; Gdzie: 1* oznacza minimum jedno wystąpienie ! oznacza, że mimo, że sekcja nie musi wystąpić, nie znalezienie obsługiwanego przypadku powoduje błąd, gdy sekcja nie występuje warunek – wyrażenie posiadające wartość logiczną

10 PL/SQL(2)M. Rakowski - WSISiZ10 Instrukcje warunkowe: CASE cd Instrukcja CASE funkcjonuje również jako operator umożliwiający określenie wartości (analogia do SQL 9i): Składnia: Zmienna := CASE element_sprawdzany [ WHEN wartość THEN wartość ] 1 * [ ELSE wartość ] END; Gdzie: 1* oznacza minimum jedno wystąpienie

11 PL/SQL(2)M. Rakowski - WSISiZ11 Instrukcje pętli: LOOP Składnia: LOOP ciąg instrukcji PL/SQL END LOOP; Polecenie EXIT bez parametru służy do bezwarunkowego lub warunkowego wyjścia z pętli. Składnia: EXIT [WHEN warunek] ; Parametry: warunek – wyrażenie posiadające wartość logiczną. Wyjście następuje tylko wtedy, gdy wynikiem obliczenia warunku jest wartość TRUE.

12 PL/SQL(2)M. Rakowski - WSISiZ12 Instrukcje pętli: FOR Składnia: FOR zmienna_indeksowa IN [REVERSE] zakres LOOP ciąg instrukcji PL/SQL END LOOP; Pętla FOR udostępnia możliwość wykonywania przy pomocy zmiennej indeksowej, która iterowana jest w zdefiniowanym zakresie. Deklaracja zmiennej indeksowej nie jest obowiązkowa, ale zakres istnienia zmiennej indeksowej dotyczy tylko danej pętli. Zakres może być zdefiniowany jako numeryczny ( wartosc_od..wartosc_do ) lub kursorowy. Istnieje klauzula REVERSE umożliwiająca zmniejszanie zmiennej indeksowej pętli (domyślnie indeks jest zwiększany).

13 PL/SQL(2)M. Rakowski - WSISiZ13 Instrukcje pętli: WHILE Składnia: WHILE warunek LOOP ciąg instrukcji END LOOP; Pętla jest iterowana dotąd, dopóki jest spełniony warunek (posiada wartość logiczną TRUE).

14 PL/SQL(2)M. Rakowski - WSISiZ14 Zadania 1.Za pomocą anonimowego bloku z inicjowaną zmienną x umożliwić wypisanie wartości funkcji na podstawie wykresu 2.Napisany w p.1 blok zmodyfikować aby wypisać zakres zachowania się funkcji w zakresie (dla liczb całkowitych) 3.Napisany w p. 1 blok zmodyfikować tak, żeby od zadanej, inicjacją zmiennej, wielkości podać największą wartość argumentu całkowitego funkcji przy której wartość funkcji jest ujemna.


Pobierz ppt "PL/SQL(2)M. Rakowski - WSISiZ1 PL/SQL Zajęcia nr II."

Podobne prezentacje


Reklamy Google