sql >> Databasteknik >  >> RDS >> Database

Hur man deklarerar användardefinierat undantag med PRAGMA EXCEPTION_INIT

Som diskuterades i introduktionen av PL/SQL Exception Handling, finns det tre sätt att deklarera användardefinierade undantag. Bland dessa tre sätt har vi redan lärt oss de två första sätten som förklarar användardefinierat undantag med

  1. Höjdeklaration och
  2. Procedur för Raise_Application_Error

Det enda sättet som återstår att diskutera nu är att förklara användardefinierade undantag med PRAGMA EXCEPTION_INIT-funktionen i Oracle Database.

Så i denna PL/SQL-handledning kommer vi att lära oss hur man deklarerar PL/SQL användardefinierat undantag i Oracle Database genom att använda PRAGMA EXCEPTION_INIT-funktionen.

Vad är PRAGMA EXCEPTION_INIT?

Pragma Exception_Init är ett tvådelat uttalande där den första delen består av nyckelordet PRAGMA och den andra delen är Exception_Init-anropet.

PRAGMA-sökord

Ett pragma är ett kompileringsdirektiv som indikerar att uttalandena följt av nyckelordet PRAGMA är ett kompileringsdirektiv, vilket betyder att satsen kommer att bearbetas vid kompileringstillfället och inte vid körning.

PRAGMA Exception_Init

Exception_init hjälper dig att associera ett undantagsnamn med ett Oracle-felnummer. Med andra ord kan vi säga att med Exception_Init kan du namnge undantaget.

Varför nämna undantaget?

Ja, det finns ett sätt att förklara användardefinierat undantag utan namnet och det är genom att använda Raise_Exception_Error-proceduren. Detta är verkligen ett enkelt och lätt sätt, men som vi lärde oss i den senaste handledningen att för att hantera undantag utan namn använder vi ANDRA undantagshanterare.

Tänk nu att i ditt projekt har du flera undantag och det också utan namn. För att hantera alla dessa undantag har du en enda undantagshanterare med namnet OTHERS. I det här fallet när ett undantagstillstånd inträffar kommer kompilatorn att visa felstacken som produceras av OTHER-hanteraren.

Kan du föreställa dig hur svårt det kommer att vara att spåra den del av ditt projekt som orsakar felet. För att spåra den delen måste du gå igenom varje rad i din kod. Detta kommer att vara slöseri med tid.

Du kan spara all tid på att slösa ansträngningar bara genom att namnge undantaget, på så sätt kan du designa en undantagshanterare som är specifik för namnet på ditt undantag som lätt kan spåras. Detta är fördelen med att namnge undantaget.

Syntax of Pragma Exception_Init.

PRAGMA EXCEPTION_INIT (exception_name, error_number);

Exempel:Deklarera användardefinierat undantag med Pragma Exception_Init

DECLARE
  ex_age    EXCEPTION;
  age       NUMBER    := 17;
  PRAGMA EXCEPTION_INIT(ex_age, -20008);
BEGIN
  IF age<18 THEN
    RAISE_APPLICATION_ERROR(-20008, 'You should be 18 or above for the drinks!');
  END IF;
  
  DBMS_OUTPUT.PUT_LINE('Sure! What would you like to have?');
  
  EXCEPTION WHEN ex_age THEN
    DBMS_OUTPUT.PUT_LINE(SQLERRM);   
END;
/

Jag har förklarat det här exemplet i min videotutorial på min YouTube-kanal i detalj. Jag ber dig att kolla in handledningen där.

Varför använda PRAGMA EXCEPTION_INIT med RAISE_APPLICATION_ERROR?

Även om det inte är obligatoriskt att använda PRAGMA EXCEPTION_INIT med RAISE_APPLICATION_ERROR-proceduren är det dock mer en personlig preferens än en programmeringsregel. Om du vill skriva ut ett felmeddelande med ett felnummer som Oracles standardsätt att visa ett fel är det bästa praxis att använda PRAGMA EXCEPTION_INIT med RAISE_APPLICATION_ERROR-proceduren.

Men om du bara vill skriva ut felmeddelandet och inte felnumret så kan du använda PRAGMAEXCEPTION_INIT med RAISE-satsen.

Det är PL/SQL-handledningen om hur man deklarerar användardefinierat undantag i Oracle Database med PRAGMA EXCEPTION_INIT. Hoppas du lärde dig något nytt. Om du tycker att denna handledning är informativ, dela den på dina sociala medier. Tack och ha en bra dag!


  1. Hur använder man Timestamp_to_scn och Scn_to_timestamp i Oracle?

  2. Hur grupperar jag på kontinuerliga intervall

  3. ClusterControl - Advanced Backup Management - mariabackup del II

  4. DBCC_OBJECT_METADATA-spärren