Innehållsförteckning:
- Handlerdeklarationer
- Om ett tillstånd inträffar som påkallar en hanterare, utförs handlingen som anges av hanteraren. Denna åtgärd är ett SQL-uttalande, som kan vara en sammansatt uttalande. Om hanteringsåtgärden fullbordas framgångsrikt utförs handler-effekten.Följande är en lista över de tre möjliga hanteringseffekterna:
Video: How does a blockchain work - Simply Explained 2024
Du kan få ditt program att titta på SQLSTATE efter utförandet av varje SQL-stämning. Det finns flera möjligheter till vad du kanske vill göra nästa. Vad gör du med den kunskap du får?
-
Om du hittar en klasskod på 00 , vill du förmodligen inte göra någonting. Du vill att utförandet ska fortsätta som du ursprungligen planerat.
-
Om du hittar en klasskod på 01 eller 02 kanske du vill vidta särskilda åtgärder. Om du förväntade dig "Warning" eller "Not Found" -indikationen, vill du förmodligen låta körningen fortsätta. Om du inte förväntade dig någon av dessa klasskoder, vill du förmodligen ha körningsgren till ett förfarande som är speciellt utformat för att hantera det oväntade, men inte helt oförutsedda, varning eller inte hittat resultat.
-
Om du får någon annan klasskod är något fel. Du borde gräva till ett undantagshanteringsförfarande. Vilket förfarande du väljer att filiala beror på innehållet i de tre underklassen tecken, samt de två klassen tecken i SQLSTATE. Om flera olika undantag är möjliga bör det finnas ett undantagshanteringsförfarande för var och en, eftersom olika undantag ofta kräver olika svar.
Du kanske kan rätta till några fel eller hitta lösningar. Andra fel kan vara dödliga. ingen kommer att dö, men du kan sluta behöva säga upp ansökan.
Handlerdeklarationer
Du kan lägga en villkorshanterare i ett sammansatt uttalande. För att skapa en tillståndshanterare måste du först förklara det villkor som det hanterar. Det angivna tillståndet kan vara ett slags undantag, eller det kan bara vara något som är sant. Här är några möjliga förutsättningar.
Villkor | Beskrivning |
---|---|
SQLSTATE VALUE
'xxyyy' |
Specifikt SQLSTATE-värde |
SQLEXCEPTION | SQLSTATE-klass annat än 00, 01 eller 02 > SQLWARNING |
SQLSTATE klass 01 | Ej fastställd |
SQLSTATE klass 02 | Följande är ett exempel på en tillståndsdeklaration: |
BEGIN DECLARE constraint_violation CONDITION FOR SQLSTATE VALUE '23000'; SLUTET;
Det här exemplet är inte realistiskt, eftersom det vanligtvis är SQL-deklarationen som kan medföra att tillståndet uppstår - såväl som hanteraren som skulle åberopas om tillståndet inträffade - skulle också bifogas BEGIN … END-strukturen.
Handler-åtgärder och hanteringseffekter
Om ett tillstånd inträffar som påkallar en hanterare, utförs handlingen som anges av hanteraren. Denna åtgärd är ett SQL-uttalande, som kan vara en sammansatt uttalande. Om hanteringsåtgärden fullbordas framgångsrikt utförs handler-effekten.Följande är en lista över de tre möjliga hanteringseffekterna:
FORTSÄTT: Fortsätt utförandet omedelbart efter det uttalande som orsakade hanteraren att åberopa.
-
-
UNDO: Ångra arbetet i de tidigare uttalandena i det sammansatta uttalandet och fortsätt sedan utförandet efter det uttalande som innehåller hanteraren.
-
Om hanteraren kan rätta till vilket problem som helst som åberopat hanteraren, kan CONTINUE-effekten vara lämplig. EXIT-effekten kan vara lämplig om hanteraren inte åtgärda problemet, men de ändringar som gjorts i det sammansatta uttalandet behöver inte ångras. UNDO-effekten är lämplig om du vill returnera databasen till det tillstånd den var innan sammansatt uttalande började att utföras.
BEGIN ATOMIC DECLARE constraint_violation CONDITION FÖR SQLSTATE VALUE '23000'; DECLARE UNDO HANDLER FÖR BEGRÄNSNINGSAVVIKLING RESIGNAL; REPLACE INTO elever (StudentID, Fname, Lname) VALUER (: sid,: sfname,: slname); INSATERA i roster (ClassID, Class, StudentID) VÄRDEN (: cid,: cname,: sid); SLUTET;
Om något av INSERT-satsen orsakar en begränsningsbrott, till exempel att försöka lägga till en post med en primär nyckel som duplicerar en primär nyckel redan i tabellen, antar SQLSTATE ett värde av "23000" och ställer därmed villkoret om begränsning av avvikelse till ett sant värde.
Om båda INSERT-meddelandena utförs framgångsrikt fortsätter exekveringen med uttalandet som följer END-sökordet.
ATOMIC-sökordet är obligatoriskt när en hanterarens effekt är UNDO. Det här är inte fallet för hanterare vars effekt antingen är FORTSÄTT eller EXIT.