complete guide pl sql exception handling with examples
Ten samouczek wyjaśnia obsługę wyjątków PL SQL i powiązane pojęcia, takie jak typy wyjątków, wyjątki zdefiniowane przez użytkownika i zdefiniowane przez system, jak zgłosić wyjątek itp .:
W PL / SQL Datetime Format z Seria PL / SQL , dowiedzieliśmy się o przydatnych funkcjach związanych z datą i godziną, znacznikiem czasu i interwałem
W tym artykule omówimy obsługę wyjątków w PL SQL. Zbadamy również zalety wyjątków i sposoby ich zgłaszania.
Zacznijmy od nauki !!
Czego się nauczysz:
Obsługa wyjątków języka PL SQL
Błąd lub zdarzenie ostrzegawcze nazywane jest wyjątkiem. Występuje podczas wykonywania programu PL / SQL w czasie wykonywania. PL / SQL posiada mechanizmy do obsługi tych wyjątkowych warunków za pomocą bloku kodu EXCEPTION, w którym zdefiniowano sposób przeciwdziałania warunkowi błędu.
Istnieją dwa rodzaje wyjątków. Są one wymienione poniżej:
- Wyjątki zdefiniowane przez użytkownika.
- Wyjątki zdefiniowane przez system.
Niektóre z popularnych wyjątków zdefiniowanych w systemie to brak pamięci i dzielenie przez zero, o nazwach takich jak odpowiednio STORAGE_ERROR i ZERO_DIVIDE. Wyjątki zdefiniowane przez użytkownika są deklarowane w pakiecie, podprogramie lub w sekcji deklaracji bloku PL / SQL i należy im nadać nazwy.
Gdy wystąpi wyjątek, naturalny przepływ wykonywania jest zatrzymywany, a następnie wykonanie wskazuje na sekcję wyjątków kodu PL / SQL. Chociaż wyjątki zdefiniowane przez system są generowane domyślnie, wyjątki zdefiniowane przez użytkownika muszą być jawnie zgłaszane przez słowo kluczowe RAISE.
W ten sposób obsługa wyjątków pomaga radzić sobie z błędami napotkanymi podczas wykonywania, a nie podczas kompilowania programu.
Zalety obsługi wyjątków
Poniżej wymieniono zalety:
- Jeśli nasz kod nie ma obsługi wyjątków, to za każdym razem, gdy wykonujemy instrukcję, musimy zweryfikować błędy w wykonaniu.
- Jeśli unikniemy obsługi wyjątków w naszym kodzie, pomijane są rzeczywiste błędy, co prowadzi do innych błędów.
- Obsługa wyjątków umożliwia pominięcie wielu weryfikacji w kodzie.
- Zapewnia lepszą czytelność kodu, izolując w kodzie procedury obsługi błędów.
Składnia obsługi wyjątków:
DECLARE <> BEGIN < > EXCEPTION <> WHEN excp1 THEN <> WHEN excp2 THEN <> ........ WHEN others THEN <> END;
Domyślny wyjątek jest wykonywany za pomocą KIEDY inni WTEDY.
połączone wskaźniki listy c ++
Rozważmy tabelę, która została nazwana OBYWATEL .
SELECT * FROM CITIZEN;
Stworzyliśmy tabelę CITIZEN za pomocą poniższej instrukcji SQL.
CREATE TABLE CITIZEN ( ID INT NOT NULL, NAME VARCHAR (15) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (ID) );
Wstaw wartości do tej tabeli za pomocą instrukcji SQL podanych poniżej:
INSERT INTO CITIZEN VALUES (1, 'ZAKS', 14); INSERT INTO CITIZEN VALUES (8, 'RANNY', 75); INSERT INTO CITIZEN VALUES (5, 'TOM', 37);
Implementacja kodowania z obsługą wyjątków:
DECLARE citizen_id citizen.id%type; citizen_name citizen.name%type; citizen_age citizen.age%type := 9; BEGIN SELECT id, name INTO citizen_id, citizen_name FROM citizen WHERE age = citizen_age; DBMS_OUTPUT.PUT_LINE ('Citizen id is: '|| citizen_id); DBMS_OUTPUT.PUT_LINE ('Citizen name is: '|| citizen_name); EXCEPTION WHEN no_data_found THEN dbms_output.put_line ('No citizen detail found'); WHEN others THEN dbms_output.put_line ('Errors'); END; /
Wyjście powyższego kodu:
W powyższym kodzie, ponieważ w tabeli CITIZEN nie ma obywateli w wieku 9 lat, zgłaszany jest wyjątek runtime.
Podnieś wyjątek w PL / SQL
Programiści mogą jawnie zgłosić wyjątek za pomocą słowa kluczowego RAISE.
Składnia zgłaszania wyjątków:
DECLARE exception_n EXCEPTION; BEGIN IF condition THEN RAISE exception_n; END IF; EXCEPTION WHEN exception_n THEN <>; END;
Tutaj wyjątek_n to nazwa wyjątku, który zgłaszamy. W ten sposób możemy zgłaszać wyjątki zdefiniowane przez użytkownika i przez system.
Wyjątek zdefiniowany przez użytkownika
Programiści mogą tworzyć własne wyjątki i używać ich do obsługi błędów. Można je utworzyć w części deklaracyjnej podprogramu i można do nich uzyskać dostęp tylko w tym podprogramie.
Wyjątek, który jest tworzony na poziomie pakietu, może być używany za każdym razem, gdy uzyskuje się dostęp do pakietu. Wyjątek zdefiniowany przez użytkownika można zgłosić za pomocą słowa kluczowego RAISE.
Składnia błędu zdefiniowanego przez użytkownika to:
DECLARE exception_n EXCEPTION;
Tutaj wyjątek_n to nazwa wyjątku, który zgłaszamy. W ten sposób możemy zadeklarować wyjątek, podając nazwę, po której następuje słowo kluczowe EXCEPTION. Wyjątek można zadeklarować w podobny sposób, jak deklarowane są zmienne. Jednak wyjątek stanowi nieoczekiwany stan, a nie element danych.
Zakres wyjątków w PL / SQL:
Zasady zakresu dla wyjątku PL / SQL są wymienione poniżej:
- Wyjątku nie można zadeklarować więcej niż raz w tym samym bloku kodu. Ale możemy zadeklarować ten sam wyjątek w dwóch różnych blokach kodu.
- Wyjątek zadeklarowany w bloku kodu jest lokalny w tym bloku i globalny dla każdego podbloku.
- Jeśli ponownie zadeklarujemy globalny wyjątek wewnątrz podbloku, lokalna deklaracja będzie nadrzędna.
Rozważmy ponownie tabelę o nazwie CITIZEN.
Implementacja kodu z wyjątkami zdefiniowanymi przez użytkownika:
DECLARE firstexception EXCEPTION; j NUMBER; BEGIN FOR j IN (SELECT * FROM CITIZEN) LOOP IF j.ID = 8 THEN RAISE firstexception; END IF; END LOOP; EXCEPTION WHEN firstexception THEN dbms_output.put_line ('Citizen with ID 8 already exist in table.'); END; /
Wyjście powyższego kodu:
Wstępnie zdefiniowany wyjątek
W przypadku naruszenia reguł bazy danych lub przekroczenia progu zależnego od systemu automatycznie generowany jest wewnętrzny wyjątek. Wszystkie te błędy mają niepowtarzalny numer, a każdy wyjątek jest określany jako nazwa. Na przykład, PL / SQL zgłasza predefiniowany wyjątek NO_DATA_FOUND, gdy zapytanie SELECT nie pobiera żadnych wierszy.
Wszystkie predefiniowane wyjątki PL / SQL są zadeklarowane w pakiecie STANDARD, który dotyczy środowiska PL / SQL.
Wyjątek | Błąd Oracle | KOD SQL | Opis |
---|---|---|---|
NIEPRAWIDŁOWY NUMER | CZAS - 01722 | -1722 | Ten wyjątek jest zgłaszany, jeśli konwersja na ciąg znaków na liczbę nie przebiega pomyślnie, ponieważ ciąg reprezentuje nieprawidłową liczbę. |
ACCESS_INTO_NULL | TERAZ - 06530 | -6530 | Ten wyjątek jest zgłaszany, jeśli obiekt null ma naturalnie przypisaną wartość. |
CASE_NOT_FOUND | TERAZ - 06592 | -6592 | Ten wyjątek jest zgłaszany, jeśli żadna z opcji w klauzuli WHEN nie została wybrana i nie istnieje klauzula ELSE. |
COLLECTION_IS_NULL | TERAZ - 06531 | -6531 | Ten wyjątek jest zgłaszany, gdy kod próbuje zastosować metody kolekcji z wyjątkiem EXISTS do zagnieżdżonej tabeli lub zmiennej, która nie została zainicjowana. Może również zostać podniesiony, jeśli nasz kod próbuje przypisać wartości do zagnieżdżonej tabeli lub zmiennej, która nie została zainicjowana. |
DUP_VAL_ON_INDEX | CZAS - 00001 | -1 | Ten wyjątek jest zgłaszany, jeśli zduplikowane wartości są próbowane do przechowywania w kolumnie, która jest ograniczona przez unikalny indeks. |
CURSOR_ALREADY_OPEN | TERAZ - 06511 | -6511 | Ten wyjątek jest zgłaszany, jeśli nasz kod próbuje otworzyć już otwarty kursor. |
INVALID_CURSOR | CZAS - 01001 | -1001 | Ten wyjątek jest zgłaszany, jeśli próbujemy wykonać operacje na kursorach, które nie są dozwolone. Na przykład próba zamknięcia już zamkniętego kursora. |
LOGIN_DENIED | CZAS - 01017 | -1017 | Ten wyjątek jest zgłaszany, jeśli program próbował zalogować się do bazy danych przy użyciu nieprawidłowej nazwy użytkownika i hasła. |
NIE ZNALEZIONO DANYCH | CZAS - 01403 | 100 | Ten wyjątek jest zgłaszany, jeśli zapytanie SELECT nie pobiera żadnych wierszy. |
NOT_LOGGED_ON | CZAS - 01012 | -1012 | Ten wyjątek jest zgłaszany, jeśli próbujemy wykonać operację na bazie danych bez łączenia się z nią. |
PROGRAM_ERROR | CZAS - 06501 | -6501 | Ten wyjątek jest zgłaszany, jeśli program PL / SQL napotkał błąd wewnętrzny. |
ROWTYPE_MISMATCH | CZAS - 06504 | -6504 | Ten wyjątek jest zgłaszany, jeśli kursor próbuje zwrócić wartości do zmiennej o niezgodnym typie danych. |
SELF_IS_NULL | TERAZ - 30625 | -30625 | Ten wyjątek jest zgłaszany, jeśli metoda składowa jest wywoływana bez inicjowania jej typu obiektu. |
STORAGE_ERROR | TERAZ - 06500 | -6500 | Ten wyjątek jest zgłaszany, jeśli program PL / SQL zabrakło pamięci lub jego pamięć została uszkodzona podczas wykonywania. |
TOO_MANY_ROWS | CZAS - 01422 | -1422 | Ten wyjątek jest zgłaszany, jeśli zapytanie SELECT pobiera wiele wierszy. |
SUBSCRIPT_BEYOND_COUNT | TERAZ - 06533 | -6533 | Ten wyjątek jest zgłaszany, jeśli indeks dolny jest większy niż całkowita liczba elementów w kolekcji. |
SUBSCRIPT_OUTSIDE_LIMIT | TERAZ - 06532 | -6532 | Ten wyjątek jest zgłaszany, jeśli indeks dolny jest poza zakresem progowym. |
SYS_INVALID_ROWID | ORA-01410 | -1410 | Ten wyjątek jest zgłaszany, jeśli konwersja na ciąg znaków do uniwersalnego identyfikatora wiersza nie przebiega pomyślnie, ponieważ ciąg znaków reprezentuje nieprawidłowy identyfikator wiersza. |
TIMEOUT_ON_RESOURCE | ORA-00051 | -51 | Ten wyjątek jest zgłaszany, jeśli Oracle czeka na zasób. |
VALUE_ERROR | ORA-06502 | -6502 | Ten wyjątek jest zgłaszany, jeśli w naszym programie wystąpi błąd matematyczny, konwersji, obcięcia. |
ZERO_DIVIDE | ORA-01476 | -1476 | Ten wyjątek jest zgłaszany, jeśli próbujemy podzielić liczbę przez 0. |
Często zadawane pytania i odpowiedzi
P 1) Co to jest predefiniowany wyjątek w PL / SQL?
Odpowiedź: Predefiniowany wyjątek jest generowany automatycznie przez PL / SQL w przypadku naruszenia reguł bazy danych przez program.
Pytanie 2) Co to jest obsługa wyjątków PL / SQL i dlaczego jest potrzebna?
Odpowiedź: Błąd lub nieoczekiwane zdarzenie w programie nosi nazwę wyjątku. Zatrzymuje normalny przepływ wykonywania programu. W PL / SQL wyjątek jest obsługiwany w bloku EXCEPTION w kodzie, a odpowiednie działanie przeciwko wyjątkowi jest opisane wewnątrz tego bloku.
Pytanie 3) Co oznacza obsługa wyjątków?
Odpowiedź: Jest to metoda reagowania na nieoczekiwane zdarzenia, które mogą wystąpić podczas wykonywania kodu.
P # 4) Jakie są dwie formy obsługi błędów?
Odpowiedź: Dwie formy obsługi błędów obejmują błąd w czasie kompilacji i błąd czasu wykonania . Błąd wykonania występuje podczas wykonywania programu z powodu nieprawidłowych danych lub logiki. Błędy czasu kompilacji są wychwytywane podczas kompilacji naszego kodu.
podstawowe programy java zadawane w wywiadach
P # 5) Jaka jest różnica między błędem a wyjątkiem?
Odpowiedź: Wyjątki to zdarzenia, które są obsługiwane za pomocą bloku try / catch i można je napotkać zarówno w czasie kompilacji, jak i w czasie wykonywania programu. Z drugiej strony błędy występują tylko w czasie wykonywania.
Wniosek
W tym samouczku szczegółowo omówiliśmy kilka podstawowych pojęć dotyczących języka PL / SQL, które są niezbędne do zarządzania wyjątkami w naszych programach.
Omówiliśmy następujące tematy wymienione poniżej:
- Wyjątki.
- Rodzaje wyjątków.
- Niektóre predefiniowane wyjątki.
W następnym samouczku omówimy transakcje PL / SQL, koncepcje OOPS i wiele innych powiązanych tematów.
rekomendowane lektury
- C # samouczek obsługi wyjątków z przykładami kodu
- Wyjątki Java i obsługa wyjątków z przykładami
- Pakiet PL SQL: Samouczek dotyczący pakietu Oracle PL / SQL z przykładami
- Obsługa wyjątków w C ++
- Samouczek języka PL SQL dla początkujących z przykładami | Co to jest PL / SQL
- PL SQL Records Tutorial z przykładami