Inhoudsopgave:
- Afhandelingsverklaringen
- Als er een voorwaarde optreedt die een handler oproept, wordt de actie uitgevoerd die door de handler is opgegeven. Deze actie is een SQL-instructie, die een samengestelde instructie kan zijn. Als de handleractie met succes is voltooid, wordt het handlereffect uitgevoerd.Het volgende is een lijst met de drie mogelijke afhandelaarseffecten:
Video: Excel VBA IF THEN Statement (with ELSEIF & Looping in cells) 2024
U kunt uw programma laten kijken naar SQLSTATE na de uitvoering van elke SQL-instructie. Er zijn verschillende mogelijkheden voor wat u vervolgens zou kunnen doen. Wat doe je met de kennis die je opdoet?
-
Als u een klassencode van 00 vindt, wilt u waarschijnlijk niets doen. U wilt dat de uitvoering doorgaat zoals u oorspronkelijk gepland had.
-
Als u een klassencode van 01 of 02 vindt, wilt u misschien speciale actie ondernemen. Als u de indicatie "Waarschuwing" of "Niet gevonden" verwacht, wilt u waarschijnlijk de uitvoering laten doorgaan. Als u geen van deze klassencodes had verwacht, wilt u waarschijnlijk een uitvoerende tak hebben van een procedure die specifiek is ontworpen om het onverwachte, maar niet geheel onverwachte, waarschu- welijke of niet gevonden resultaat te behandelen.
-
Als u een andere klascode ontvangt, is er iets mis. U moet vertakken naar een procedure voor het afhandelen van uitzonderingen. Welke procedure u kiest om te vertakken, hangt af van de inhoud van de drie subklasse-tekens, evenals de twee klasse-tekens van SQLSTATE. Als er meerdere verschillende uitzonderingen mogelijk zijn, moet er een uitzonderingsafhandelingsprocedure voor elk zijn, omdat verschillende uitzonderingen vaak verschillende antwoorden vereisen.
U kunt mogelijk enkele fouten corrigeren of oplossingen vinden. Andere fouten kunnen fataal zijn; niemand zal sterven, maar het kan zijn dat je de applicatie moet beëindigen.
Afhandelingsverklaringen
U kunt een voorwaardehandler in een samengestelde instructie plaatsen. Als u een voorwaarde-handler wilt maken, moet u eerst de voorwaarde declareren die hiermee wordt afgehandeld. De aangegeven toestand kan een soort uitzondering zijn, of het kan gewoon iets zijn dat waar is. Hier zijn enkele mogelijke voorwaarden.
Voorwaarde | Beschrijving |
---|---|
SQLSTATE VALUE
'xxyyy' |
Specifieke SQLSTATE-waarde |
SQLEXCEPTION | SQLSTATE-klasse anders dan 00, 01 of 02 > SQLWARNING |
SQLSTATE-klasse 01 | NIET GEVONDEN |
SQLSTATE-klasse 02 | Het volgende is een voorbeeld van een toestandsaangifte: |
BEGIN DECLARE constraint_violation VOORWAARDE VOOR SQLSTATE VALUE '23000'; EINDE;
Dit voorbeeld is niet realistisch, omdat meestal de SQL-instructie die ertoe kan leiden dat de voorwaarde optreedt - en ook de handler die wordt aangeroepen als de voorwaarde is opgetreden - ook wordt ingesloten in de BEGIN … END-structuur.
Handleracties en handlereffecten
Als er een voorwaarde optreedt die een handler oproept, wordt de actie uitgevoerd die door de handler is opgegeven. Deze actie is een SQL-instructie, die een samengestelde instructie kan zijn. Als de handleractie met succes is voltooid, wordt het handlereffect uitgevoerd.Het volgende is een lijst met de drie mogelijke afhandelaarseffecten:
DOORGAAN: Ga door met de uitvoering direct na de instructie die heeft veroorzaakt dat de afhandelingsroutine is aangeroepen.
-
-
UNDO: maak het werk van de eerdere instructies in de samengestelde instructie ongedaan en vervolg de uitvoering na de instructie die de handler bevat.
-
Als de handler welk probleem dan ook dat door de handler is aangeroepen, kan corrigeren, kan het CONTINUE-effect geschikt zijn. Het EXIT-effect kan geschikt zijn als de handler het probleem niet heeft opgelost, maar de wijzigingen in de samengestelde instructie hoeven niet ongedaan te worden gemaakt. Het UNDO-effect is geschikt als u de database wilt terugzetten naar de staat waarin deze zich bevond voordat de samengestelde instructie werd uitgevoerd.
BEGIN ATOMIC DECLARE constraint_violation VOORWAARDE VOOR SQLSTATE VALUE '23000'; VERKLAAR EEN ONDO-HANDELAAR VOOR BEPERKING VAN BEWEGING RESIGNAL; REPLACE INTO students (StudentID, Fname, Lname) VALUES (: sid,: sfname,: slname); INVOEGEN in rooster (ClassID, Class, StudentID) VALUES (: cid,: cname,: sid); EINDE;
Als een van de INSERT-instructies een beperkende overtreding veroorzaakt, zoals het proberen een record toe te voegen met een primaire sleutel die al een primaire sleutel dupliceert die al in de tabel voorkomt, neemt SQLSTATE de waarde '23000' aan, waardoor de beperkingsvoorwaarde wordt ingesteld op een echte waarde.
Als beide INSERT-instructies met succes worden uitgevoerd, wordt de uitvoering voortgezet met de instructie na het trefwoord END.
Het ATOMIC-sleutelwoord is verplicht als het effect van een handler UNDO is. Dit is niet het geval voor handlers waarvan het effect CONTINUE of EXIT is.