Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Zadeklaruj wyjątek zdefiniowany przez użytkownika przy użyciu metody RAISE_APPLICATION_ERROR w bazie danych Oracle

Jak omówiono we wstępie do obsługi wyjątków PL/SQL, istnieją trzy sposoby deklarowania wyjątków zdefiniowanych przez użytkownika w Oracle PL/SQL. Wśród tych trzech omówiliśmy już i poznaliśmy pierwszy sposób w poprzednim samouczku. Dzisiaj na tym blogu zrobimy krok do przodu i zobaczymy drugi sposób deklarowania wyjątku definiowanego przez użytkownika i nauczymy się deklarować wyjątek definiowany przez użytkownika przy użyciu metody RAISE_APPLICATION_ERROR.

Co to jest metoda RAISE_APPLICATION_ERROR?

RAISE APPLICATION ERROR to procedura składowana, która jest wbudowana w oprogramowanie Oracle. Korzystając z tej procedury, możesz powiązać numer błędu z niestandardowym komunikatem o błędzie. Łącząc zarówno numer błędu, jak i niestandardowy komunikat o błędzie, możesz utworzyć ciąg błędu, który wygląda podobnie do domyślnych ciągów błędów, które są wyświetlane przez silnik Oracle, gdy wystąpi błąd.

Ile błędów możemy wygenerować za pomocą procedury RAISE_APPLICATION_ERROR?

Procedura RAISE_APPLICATION_ERROR pozwala nam numerować nasze błędy od -20 000 do -20 999, więc możemy powiedzieć, że używając procedury RAISE_APPLICATION_ERROR możemy wygenerować 1000 błędów.

Raise_application_error jest częścią którego pakietu?

Procedurę RAISE_APPLICATION_ERROR można znaleźć w pakiecie DBMS_STANDARD.

Składnia Raise_Application_Error

raise_application_error (error_number, message [, {TRUE | FALSE}]);

W tym przypadku numer_błędu jest ujemną liczbą całkowitą z zakresu -20000.. -20999, a komunikat jest ciągiem znaków o długości do 2048 bajtów. Jeśli opcjonalny trzeci parametr ma wartość PRAWDA, błąd jest umieszczany na stosie wszystkich poprzednich błędów. Jednak w przypadku parametru FALSE (domyślnego) błąd zastępuje wszystkie poprzednie błędy. RAISE_APPLICATION_ERROR jest częścią pakietu DBMS_STANDARD i nie musisz określać odniesień do pakietu STANDARD. 

Przykład procedury RAISE_APPLICATION_ERROR

W poniższym przykładzie weźmiemy od użytkownika dane wejściowe typu numerycznego i sprawdzimy, czy jest to 18 lub więcej. Jeśli tak nie jest, zostanie zgłoszony błąd zdefiniowany przez użytkownika, który zadeklarujemy, w przeciwnym razie nastąpi normalny przebieg wykonywania programu.

Krok 1:Ustaw wyjście serwera na

Jeśli chcemy zobaczyć wynik zwrócony przez program PL/SQL na domyślnym ekranie wyjściowym, będziemy musieli ustawić wyjście serwera na „włączone”, które jest domyślnie ustawione na „wyłączone” dla sesji.

SET SERVEROUTPUT ON;

Krok 2:Wprowadź dane wejściowe użytkownika

Chociaż możemy na stałe umieścić wartości w naszym kodzie, tak jak zrobiliśmy to w poprzednim samouczku, ale nie jest to takie zabawne. Aby kod był bardziej dynamiczny, tym razem zdecydowałem się zaakceptować dane wprowadzone przez użytkownika, pozwalając mu wprowadzić wartość w wyskakującym okienku z wydrukowaną niestandardową wiadomością.

Możemy pobrać dane wejściowe za pomocą wyskakującego okienka z wydrukowaną na nim spersonalizowaną wiadomością za pomocą polecenia ACCEPT w Oracle PL/SQL.

ACCEPT var_age NUMBER PROMPT 'What is your age?';

Polecenie rozpoczyna się słowem kluczowym accept, po którym następuje nazwa zmiennej i jej typ danych. W naszym przypadku nazwa to var_age, a typ danych to LICZBA. To jest pierwsza połowa oświadczenia. Ta część pomoże nam w przechowywaniu wartości wejściowej. Druga połowa wyciągu będzie odpowiedzialna za wydrukowanie spersonalizowanej wiadomości na wyskakującym okienku. Używając słowa kluczowego PROMPT, które znajduje się zaraz po typie danych zmiennej, możesz określić dowolny ciąg, który chcesz wydrukować w wyskakującym okienku. W naszym przypadku ta dostosowana wiadomość będzie brzmieć „Jaki jest Twój wiek?”

Jeśli chcesz, abym zrobił obszerny samouczek szczegółowo wyjaśniający polecenie AKCEPTUJ, udostępnij ten blog, używając hashtagu #RebellionRider. Możesz również napisać do mnie na moim Twitterze @RebellionRider.

Krok 3:Zadeklaruj zmienną

DECLARE
  age   NUMBER := &var_age;

Ze względu na ograniczenie zakresu nie możemy użyć wartości zapisanej w zmiennej, której użyliśmy w poleceniu accept. Oznacza to, że nie możemy bezpośrednio użyć tej wartości w naszym programie PL/SQL. Możemy rozwiązać ten problem, przypisując wartość, która była przechowywana w zmiennej var_age, do zmiennej, która jest lokalna dla bloku PL/SQL. Dokładnie to zrobiliśmy w powyższym segmencie kodu.

W powyższym segmencie kodu zadeklarowaliśmy zmienną lokalną o nazwie „wiek” i przypisaliśmy wartość przechowywaną w zmiennej var_age za pomocą operatora przypisania.

Krok 4:zadeklaruj wyjątek zdefiniowany przez użytkownika za pomocą procedury RAISE_APPLICATION_ERROR

BEGIN
  IF age < 18 THEN
   RAISE_APPLICATION_ERROR (-20008, 'you should be 18 or above for the DRINK!');
  END IF;

W tym segmencie kodu zadeklarowaliśmy wyjątek zdefiniowany przez użytkownika za pomocą procedury RAISE_APPLICATION_ERROR. Ta procedura jest wywoływana przy użyciu dwóch parametrów. W którym pierwszym parametrem jest liczba ujemna, która w moim przypadku wynosi -20008, a druga liczba to ciąg znaków, który zostanie wyświetlony, jeśli wystąpi ten sam błąd.

Teraz pytanie brzmi, kiedy ten błąd wystąpi?

Jak widać, kod jest zamknięty w warunkowym bloku kontrolnym IF-THEN, który zapewnia, że ​​błąd zostanie zgłoszony tylko wtedy, gdy użytkownik ma mniej niż 18 lat.

Krok 5:Wykonywalne oświadczenie

DBMS_OUTPUT.PUT_LINE('Sure, What would you like to have?');

Instrukcje wykonywalne to te, które są kompilowane i uruchamiane, gdy nie ma błędu, a program ma normalny przebieg wykonywania. Aby kod był prosty i łatwy do zrozumienia, napisałem tylko jedno oświadczenie, które jest instrukcją DBMS OUTPUT.

Krok 6:Napisz procedurę obsługi wyjątków

Teraz, gdy zadeklarowaliśmy i podnieśliśmy wyjątek definiowany przez użytkownika, musimy napisać dla niego procedurę obsługi wyjątków. Jak wspomniano w poprzednim samouczku dotyczącym PL/SQL, w sekcji Obsługa wyjątków określamy, co się stanie, gdy wywołany zostanie błąd.

EXCEPTION WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
/

W tej sekcji dotyczącej obsługi wyjątków wywołałem funkcję SQLERRM za pomocą instrukcji DBMS OUTPUT. Jest to funkcja narzędziowa dostarczana przez Oracle, która pobiera komunikat o błędzie dotyczący ostatniego wystąpienia wyjątku.

Skompilujmy wszystkie te małe fragmenty kodu w jeden duży program.

Wyjątek zdefiniowany przez użytkownika przy użyciu procedury Raise_Application_Error

SET SERVEROUTPUT ON;
ACCEPT var_age NUMBER PROMPT 'What is yor age';
DECLARE
  age   NUMBER := &var_age;
BEGIN
  IF age < 18 THEN
    RAISE_APPLICATION_ERROR (-20008, 'you should be 18 or above for the DRINK!');
  END IF; 
  DBMS_OUTPUT.PUT_LINE ('Sure, What would you like to have?'); 
  EXCEPTION WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE (SQLERRM);
END;
/ 

Jest to krótki, ale opisowy samouczek dotyczący deklarowania wyjątku zdefiniowanego przez użytkownika za pomocą procedury Raise_Application_Error w bazie danych Oracle. Mam nadzieję, że nauczyłeś się czegoś nowego i podobało ci się czytanie. Możesz pomóc innym w nauce, a także pomóc mi i mojemu kanałowi w rozwoju, udostępniając ten blog w swoich mediach społecznościowych. Dzięki i życzę miłego dnia!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zwróć wiersze zawierające wartości liczbowe w Oracle

  2. Wstawianie/aktualizacja wsadowa MyBatis dla Oracle

  3. Jak zmapować ciąg do sekwencji DB w Hibernate?

  4. Kolekcje Oracle PL/SQL — dodawanie elementów do istniejącej tabeli

  5. Błąd podczas używania pliku oracle.dataaccess.dll