Oracle Raise_Application_Error Funktion

Oracle Raise Application Error Funktion



Når det kommer til udvikling, er der altid plads til fejl, uanset om det er en applikationsfejl eller en brugerrelateret fejl. Som udvikler skal du forudse, hvor en fejl kan opstå, og gribe ind på forhånd. Almindeligvis kendt som fejlhåndtering, kan denne proces give din applikation mulighed for at køre problemfrit, selv når der opstår en fejl uden at afslutte før tid.

I denne artikel vil du lære om en af ​​fejlhåndteringsprocedurerne i Oracle-databasen kaldet raise_application_error.

Oracle Raise_Application_Error Procedure

raise_application_error i Oracle er en lagret procedure, der giver dig mulighed for at hæve de brugerdefinerede fejlmeddelelser.







Når du arbejder med Oracle-databasen, er du muligvis stødt på en fejlmeddelelse som den i følgende:



[ 42000 ] [ 904 ] ORA-00904: 'HEJ' : ugyldig identifikator

Denne type fejl er kendt som en databasemotorfejl. Det defineres i Oracle-databasen og hæves, når en given fejl opstår.



Ved at bruge proceduren raise_application_error giver Oracle os mulighed for at definere vores brugerdefinerede meddelelser med en specifik fejlkode og meddelelse.





Dette kan være meget nyttigt, når der opstår en specifik fejl, og du ønsker at advare brugeren med en beskrivende fejlmeddelelse. Det betyder, at du ikke vil have uhåndteret fejlundtagelserne uden nogen udtalelse om, hvad der skete.

Proceduresyntaks og -parametre

Følgende kodestykke etablerer syntaksen for proceduren raise_application_error:



raise_application_error (
fejlnummer,
besked,
[ { SAND | FALSK } ]
) ;

Proceduren består af tre hovedparametre:

  1. Error_number – Denne parameter repræsenterer en specifik heltalsværdi, som er knyttet til en fejlkode. Værdien af ​​denne parameter går fra -20000 til -20999.
  2. Meddelelse – Dette er en strengværdi, der angiver den brugerdefinerede fejlmeddelelse, der skal vises for brugeren. Værdien af ​​meddelelsesparameteren har en længde på op til 70 bytes.
  3. Keeperrorstack – Denne parameter er en boolsk værdi, der bestemmer, om fejlstakken skal bevares. Som standard vedligeholder proceduren ikke fejlstakken.

BEMÆRK: Bevarelse af fejlstakken betyder, at fejlen føjes til rækken af ​​tidligere fejl. Hvis stakken ikke er bevaret, erstatter den nye fejlmeddelelse alle de tidligere fejl.

Følgende er nogle vigtige punkter at bemærke for proceduren for raise_application_error:

  1. Databasemotoren stopper automatisk og øjeblikkeligt udførelsen af ​​den overordnede blok, når den støder på den lagrede raise_application_error-procedure.
  2. Proceduren fremtvinger en rollback for alle de operationer, der er foretaget til OUT- og IN OUT-parametrene.
  3. funktionen raise_application_error procedure rollback påvirker ikke de globale datastrukturer såsom databaseobjekter. Men hvis du ønsker at udføre en tilbagerulning på sådanne objekter, skal du udtrykkeligt kalde tilbagerulningsoperationen.

Eksempel Raise_Application_Error Stored Procedure Usage

I dette eksempel skal vi demonstrere, hvordan man bruger proceduren raise_application_error ved hjælp af HR-skemaet.

https://docs.oracle.com/cd/B13789_01/server.101/b10771/scripts003.htm

Overvej følgende kildekode:

oprette eller erstatte procedure check_commission (
emp_id nummer
)
er
fname      EMPLOYEES.FIRST_NAME % type ;
på         MEDARBEJDERE.EMAIL % type ;
sal        ANSATTE.LØN % type ;
kommission MEDARBEJDERE.KOMMISSION_PCT % type ;
begynde
Vælg FIRST_NAME, EMAIL, LØN, COMMISSION_PCT
ind i fname, em, sal, provision
fra MEDARBEJDERE
hvor EMPLOYEE_ID = emp_id;
hvis provision er nul derefter
raise_application_error ( - 20002 , 'Nul provisionsprocent stødt på!!' || emp_id ) ;
ende hvis ;
undtagelse
når andre derefter
DBMS_OUTPUT.PUT_LINE ( 'SQLCODE:' || SQLCODE ) ;
DBMS_OUTPUT.PUT_LINE ( 'SQLERRM:' || SQLERRM ) ;
ende;

Det forrige eksempel starter med at oprette en procedure, der accepterer et medarbejder-id. Vi bruger så medarbejderen til at udvælge værdierne blandt medarbejderne. Til sidst bruger vi en IF-sætning til at kontrollere, om provisionen for den modtagne række er nul. Hvis det er sandt, rejser vi en undtagelse.

Vi kan kalde proceduren med målet medarbejder-id:

ring check_kommission ( 100 ) ;

Produktion :

SQLCODE -438
SQLERRM: SQL0438N Applikationen rejste fejl eller advarsel med diagnostisk tekst: 'Nul provisionsprocent fundet:. SQLSTATE=UD030

Konklusion

I denne øvelse lærte du, hvordan du bruger den lagrede procedure for raise_application_error til at rejse de brugerdefinerede fejlmeddelelser.