Innholdsfortegnelse:
- Handler erklæring
- Hvis en tilstand oppstår som påkaller en handler, utføres handlingen som er angitt av handleren. Denne handlingen er en SQL-setning, som kan være en sammensatt setning. Hvis håndteringsaksjonen fullføres vellykket, utfører handler-effekten.Følgende er en liste over de tre mulige håndteringseffekter:
Video: Python Web Apps with Flask by Ezra Zigmond 2025
Du kan få programmet til å se på SQLSTATE etter utførelsen av hver SQL-setning. Det er flere muligheter for hva du kanskje vil gjøre neste. Hva gjør du med kunnskapen du får?
-
Hvis du finner en klassekode på 00 , vil du sannsynligvis ikke gjøre noe. Du vil at utførelsen skal fortsette som du opprinnelig planla.
-
Hvis du finner en klassekode på 01 eller 02 , vil du kanskje foreta en spesiell handling. Hvis du forventet "Advarsel" eller "Ikke funnet" indikasjon, vil du sannsynligvis la utførelsen fortsette. Hvis du ikke forventer noen av disse klassekodene, vil du sannsynligvis ha eksekveringsgren til en prosedyre som er spesielt utviklet for å håndtere det uventede, men ikke helt uventede, advarsel eller ikke funnet resultat.
-
Hvis du mottar noen annen klassekode, er noe galt. Du bør grense til en unntakshåndteringsprosedyre. Hvilken prosedyre du velger å avgrense, avhenger av innholdet i de tre underklassekarakterene, samt de to klassetegnene i SQLSTATE. Hvis flere forskjellige unntak er mulige, bør det være en unntakshåndteringsprosedyre for hver enkelt, fordi forskjellige unntak ofte krever forskjellige svar.
Du kan kanskje rette feil eller finne løsninger. Andre feil kan være dødelig; Ingen vil dø, men du må ende opp med å avslutte søknaden.
Handler erklæring
Du kan sette en tilstandshåndterer i en sammensatt setning. For å opprette en tilstandshåndterer må du først deklarere tilstanden den skal håndtere. Tilstanden erklært kan være en slags unntak, eller det kan bare være noe som er sant. Her er noen mulige forhold.
Tilstand | Beskrivelse |
---|---|
SQLSTATE VERDI
'xxyyy' |
Spesifikk SQLSTATE verdi |
SQLEXCEPTION | SQLSTATE klasse annet enn 00, 01 eller 02 > SQLWARNING |
SQLSTATE klasse 01 | IKKE FUNDET |
SQLSTATE klasse 02 | Følgende er et eksempel på en tilstandsdeklarasjon: |
BEGIN DECLARE constraint_violation CONDITION FOR SQLSTATE VALUE '23000'; SLUTT;
Dette eksemplet er ikke realistisk, fordi det ofte er SQL-setningen som kan føre til at tilstanden oppstår - så vel som håndterer som ville bli påkalt hvis tilstanden oppsto - vil også være vedlagt i BEGIN … END-strukturen.
Handler-handlinger og håndteringseffekter
Hvis en tilstand oppstår som påkaller en handler, utføres handlingen som er angitt av handleren. Denne handlingen er en SQL-setning, som kan være en sammensatt setning. Hvis håndteringsaksjonen fullføres vellykket, utfører handler-effekten.Følgende er en liste over de tre mulige håndteringseffekter:
FORTSETT: Fortsett kjøringen umiddelbart etter setningen som forårsaket at handleren ble påkalt.
-
-
UNDO: Løsne arbeidet til de forrige setningene i sammensatt setning og fortsett deretter utførelsen etter setningen som inneholder handleren.
-
Hvis håndterer kan rette opp hvilket problem som påberopes handleren, kan FORTSATT effekten være passende. EXIT-effekten kan være hensiktsmessig dersom håndtereren ikke løste problemet, men endringene som er gjort i sammensatte setningen behøver ikke å bli fortrykt. UNDO-effekten er hensiktsmessig hvis du vil returnere databasen til tilstanden den var i før sammensatt setningen begynte å bli kjørt.
BEGIN ATOMIC DECLARE constraint_violation CONDITION FOR SQLSTATE VALUE '23000'; ERKLÆR UNDO HANDLER FOR begrensning_violering RESIGNAL; INSERT TIL elever (StudentID, Fname, Lname) VALUES (: sid,: sfname,: slname); INSERT i roster (ClassID, Class, StudentID) VALUES (: cid,: cname,: sid); SLUTT;
Hvis en av INSERT-setningene forårsaker et begrensningsbrudd, for eksempel å prøve å legge til en post med en primærnøkkel som dupliserer en primærnøkkel allerede i tabellen, antar SQLSTATE en verdi på '23000', og setter dermed betingelsen for begrensning_violering til en sann verdi.
Hvis begge INSERT-setningene utføres, fortsetter kjøringen med setningen som følger END-søkeordet.
ATOMIC-nøkkelordet er obligatorisk når en håndterings effekt er UNDO. Dette er ikke tilfelle for håndtere som har effekt enten CONTINUE eller EXIT.