Indholdsfortegnelse:
- Handler erklæringer
- Hvis der opstår en betingelse, der påberåber en handler, udføres handlingen, der er angivet af håndtereren. Denne handling er en SQL-sætning, som kan være en sammensat sætning. Hvis handlerhandlingen fuldføres med succes, udføres handler-effekten.Følgende er en liste over de tre mulige håndteringseffekter:
Video: Top 25 Excel 2016 Tips and Tricks 2025
Du kan få dit program til at se på SQLSTATE efter udførelsen af hver SQL-sætning. Der er flere muligheder for, hvad du måske vil gøre næste. Hvad gør du med den viden, du får?
-
Hvis du finder en klassekode på 00 , vil du sandsynligvis ikke gøre noget. Du vil have, at udførelsen skal fortsætte, som du oprindeligt planlagde.
-
Hvis du finder en klassekode på 01 eller 02 , kan du tage en særlig handling. Hvis du forventede "Advarsel" eller "Ikke fundet" -indikation, vil du sandsynligvis lade udførelsen fortsætte. Hvis du ikke havde forventet nogen af disse klassekoder, vil du sandsynligvis have en eksekutiv filial til en procedure, der er specielt designet til at håndtere det uventede, men ikke helt uventede, advarsel eller ikke fundet resultat.
-
Hvis du modtager en anden klasse kode, er der noget der er galt. Du skal grunde til en undtagelseshåndteringsprocedure. Hvilken procedure du vælger at filialere afhænger af indholdet af de tre underklasse tegn samt de to klassetegn i SQLSTATE. Hvis flere forskellige undtagelser er mulige, bør der være en undtagelseshåndteringsprocedure for hver enkelt, fordi forskellige undtagelser ofte kræver forskellige svar.
Du kan muligvis rette fejl eller finde løsninger. Andre fejl kan være dødelige; ingen vil dø, men du kan ende med at opsige ansøgningen.
Handler erklæringer
Du kan sætte en tilstandshåndterer i en sammensat sætning. For at oprette en tilstandshåndterer skal du først erklære den betingelse, som den skal håndtere. Den angivne betingelse kan være en form for undtagelse, eller det kan bare være noget, der er sandt. Her er nogle mulige forhold.
Tilstand | Beskrivelse |
---|---|
SQLSTATVÆRDI
'xxyyy' |
Specifik SQLSTATE værdi |
SQLEXCEPTION | SQLSTATE klasse undtagen 00, 01 eller 02 > SQLWARNING |
SQLSTATE klasse 01 | IKKE FUNDET |
SQLSTATE klasse 02 | Følgende er et eksempel på en tilstandserklæring: |
BEGIN DECLARE constraint_violation CONDITION FOR SQLSTATE VALUE '23000'; ENDE;
Dette eksempel er ikke realistisk, fordi den SQL-sætning, der kan forårsage tilstanden - såvel som den håndterer, der ville blive påkaldt, hvis tilstanden opstod - også ville være vedlagt inden for BEGIN … END-strukturen.
Handler-handlinger og håndteringseffekter
Hvis der opstår en betingelse, der påberåber en handler, udføres handlingen, der er angivet af håndtereren. Denne handling er en SQL-sætning, som kan være en sammensat sætning. Hvis handlerhandlingen fuldføres med succes, udføres handler-effekten.Følgende er en liste over de tre mulige håndteringseffekter:
FORTSÆT: Fortsæt eksekveringen umiddelbart efter den erklæring, der forårsagede at håndtereren blev påberåbt.
-
-
UNDO: Fortryd arbejdet i de foregående sætninger i den sammensatte sætning, og fortsæt derefter udførelsen efter erklæringen, der indeholder handleren.
-
Hvis håndtereren kan rette op på det problem, der påberåber handleren, kan CONTINUE-effekten være passende. EXIT-effekten kan være hensigtsmæssig, hvis håndtereren ikke løste problemet, men de ændringer, der er foretaget i den sammensatte sætning, behøver ikke at fortrydes. UNDO-effekten er hensigtsmæssig, hvis du vil returnere databasen til den tilstand, den var i, før den sammensatte sætning begyndte at udføres.
BEGIN ATOMIC DECLARE constraint_violation CONDITION FOR SQLSTATE VALUE '23000'; ERKLÆR UNDO HANDLER FOR begrænsning_violation RESIGNAL; INSERT TIL elever (StudentID, Fname, Lname) VÆRDIER (: sid,: sfname,: slname); Indsæt i roster (ClassID, Class, StudentID) VÆRDIER (: cid,: cname,: sid); ENDE;
Hvis et af INSERT-udsagnene forårsager en begrænsning, som f.eks. Forsøger at tilføje en post med en primærnøgle, der duplicerer en primærnøgle allerede i tabellen, antager SQLSTATE en værdi på '23000' og indstiller således betingelsen for begrænsning af vold til en sand værdi.
Hvis begge INSERT-sætninger udføres korrekt, fortsætter eksekveringen med sætningen efter END-søgeordet.
ATOMIC-søgeordet er obligatorisk, når en håndterings effekt er UNDO. Dette er ikke tilfældet for håndtere, hvis effekt er enten FORTSÆT eller EXIT.