sql >> Database teknologi >  >> RDS >> Database

Sådan erklærer du brugerdefineret undtagelse ved hjælp af PRAGMA EXCEPTION_INIT

Som diskuteret i introduktionen af ​​PL/SQL-undtagelseshåndtering, er der tre måder at erklære brugerdefinerede undtagelser på. Blandt disse tre måder har vi allerede lært de første to måder, som erklærer en brugerdefineret undtagelse ved hjælp af

  1. Hæv erklæring og
  2. Raise_Application_Error procedure

Den eneste måde, der er tilbage at blive diskuteret nu, er at erklære brugerdefinerede undtagelser ved hjælp af PRAGMA EXCEPTION_INIT-funktionen i Oracle Database.

Derfor vil vi i denne PL/SQL-tutorial lære, hvordan man erklærer PL/SQL-brugerdefinerede undtagelser i Oracle Database ved at bruge PRAGMA EXCEPTION_INIT-funktionen.

Hvad er PRAGMA EXCEPTION_INIT?

Pragma Exception_Init er en todelt erklæring, hvor første del består af nøgleordet PRAGMA og anden del er Exception_Init-kaldet.

PRAGMA-søgeord

Et pragma er et kompileringsdirektiv, som angiver, at erklæringerne efterfulgt af nøgleordet PRAGMA er en kompileringsdirektiv, hvilket betyder, at erklæringen vil blive behandlet på kompileringstidspunktet og ikke under kørslen.

PRAGMA Exception_Init

Exception_init hjælper dig med at knytte et undtagelsesnavn til et Oracle-fejlnummer. Med andre ord kan vi sige, at ved at bruge Exception_Init kan du navngive undtagelsen.

Hvorfor nævne undtagelsen?

Ja, der er en måde at erklære en brugerdefineret undtagelse uden navnet, og det er ved at bruge Raise_Exception_Error-proceduren. Dette er faktisk en enkel og nem måde, men som vi lærte i den sidste tutorial, bruger vi ANDRE undtagelseshåndtering for at håndtere undtagelser uden navn.

Tænk nu, at du i dit projekt har flere undtagelser, og det også uden navn. For at håndtere alle disse undtagelser har du en enkelt undtagelsesbehandler med navnet ANDRE. I dette tilfælde vil compileren ved forekomsten af ​​en undtagelsestilstand vise fejlstakken produceret af OTHER-behandleren.

Kan du forestille dig, hvor svært det vil være at spore den del af dit projekt, der forårsager fejlen. For at spore den del skal du gennemgå hver og hver linje i din kode. Dette vil blot være spild af tid.

Du kan spare al den tidsspildende indsats blot ved at navngive undtagelsen, på den måde kan du designe en undtagelsesbehandler, der er specifik for navnet på din undtagelse, som let kan spores. Dette er fordelen ved at navngive undtagelsen.

Syntaks for Pragma Exception_Init.

PRAGMA EXCEPTION_INIT (exception_name, error_number);

Eksempel:Erklær brugerdefineret undtagelse ved hjælp af 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;
/

Jeg har forklaret dette eksempel i min videotutorial på min YouTube-kanal i detaljer. Jeg vil bede dig om at tjekke selvstudiet der.

Hvorfor bruge PRAGMA EXCEPTION_INIT med RAISE_APPLICATION_ERROR?

Selvom det ikke er obligatorisk at bruge PRAGMA EXCEPTION_INIT med RAISE_APPLICATION_ERROR procedure, er det dog mere en personlig præference end en programmeringsregel. Hvis du vil udskrive en fejlmeddelelse med et fejlnummer som Oracles standardmåde at vise en fejl på, er det den bedste praksis at bruge PRAGMA EXCEPTION_INIT med RAISE_APPLICATION_ERROR-proceduren.

Men hvis du bare vil udskrive fejlmeddelelsen og ikke fejlnummeret, kan du bruge PRAGMAEXCEPTION_INIT med RAISE-sætning.

Det er PL/SQL-tutorialen om, hvordan man erklærer en brugerdefineret undtagelse i Oracle Database ved hjælp af PRAGMA EXCEPTION_INIT. Håber du har lært noget nyt. Hvis du finder denne tutorial informativ, så del den på dine sociale medier. Tak og god dag!


  1. Indsamlingstider for Spotlight Cloud Alarmer

  2. Håndtering af roller og statusser i et system

  3. Sortering af træ med en materialiseret sti?

  4. Hvorfor opretter du en visning i en database?