Hinweise zum Umgang mit SQL-Bedingungen

Sie können Ihr Programm sich auch SQLSTATE

nach der Ausführung jeder SQL-Anweisung. Es gibt mehrere Möglichkeiten für das, was Sie als nächstes tun möchten. Was tun Sie mit dem Wissen, dass Sie gewinnen?

  • Wenn Sie eine Klasse-Code finden 00, Sie wahrscheinlich nicht wollen, etwas zu tun. Sie möchten die Ausführung zu verfahren, wie Sie ursprünglich geplant.

  • Wenn Sie eine Klasse-Code finden 01 oder 02, Sie sollten besondere Maßnahmen zu ergreifen. Wenn Sie erwartet, dass der # 147-Warnung # 148- oder # 147-Nicht # 148- Anzeige gefunden, haben Sie wahrscheinlich die Ausführung gehen lassen wollen. Wenn Sie nicht eine dieser Klasse Codes erwarten, möchten Sie wahrscheinlich Ausführung Verzweigung zu einem Verfahren zu haben, das speziell entwickelt wurde, das Unerwartete zu handhaben, aber nicht völlig unerwartet, Warnung oder nicht Ergebnis gefunden.

  • Wenn Sie eine andere Klasse Code erhalten, ist etwas nicht in Ordnung. Sie sollten auf eine Ausnahmebehandlungsverfahren verzweigen. Welches Verfahren Sie wählen, verzweigen auf die Inhalte der drei Unterklasse Zeichen abhängt, sowie die beiden Klassen Zeichen von SQLSTATE. Wenn mehrere verschiedene Ausnahmen möglich sind, sollte es eine Ausnahmebehandlungsverfahren für jeden sein, weil verschiedene Ausnahmen oft unterschiedliche Antworten erfordern.

    Sie können in der Lage sein, einige Fehler zu korrigieren oder Abhilfen finden. Andere Fehler sein kann fatal- wird niemand sterben, aber Sie können am Ende mit, um die Anwendung zu beenden.

Handler Erklärungen

Sie können ein setzen Zustand Handler innerhalb einer zusammengesetzten Anweisung. Um eine Bedingung Handler erstellen, müssen Sie zuerst die Bedingung erklären, dass er behandelt. Der Zustand deklariert wurde, kann eine Art Ausnahme sein, oder es kann nur etwas sein, das ist wahr. Hier sind einige mögliche Bedingungen.

BedingungBeschreibung
SQLSTATE VALUE'xxyyy 'spezifisch SQLSTATE Wert
SQLEXCEPTIONSQLSTATE anderen Klasse als 00, 01, oder 02
SQLWARNINGSQLSTATE Klasse 01
NICHT GEFUNDENSQLSTATE Klasse 02

Im Folgenden ist ein Beispiel für eine Bedingung Erklärung:

BEGINDECLARE constraint_violation CONDITIONFOR SQLSTATE VALUE '23000' -END -

Dieses Beispiel ist nicht realistisch, weil in der Regel die SQL-Anweisung, die die Bedingung auftreten kann, verursachen - sowie der Handler, der aufgerufen werden würde, wenn die Bedingung auftrat - auch innerhalb der eingeschlossen werden würde BEGIN # 133-END Struktur.

Handler Aktionen und Handler-Effekte

Wenn eine Bedingung auftritt, dass ein Handler aufruft, führt die angegebene Aktion vom Handler. Diese Aktion ist eine SQL-Anweisung, die eine zusammengesetzte Anweisung sein kann. Wenn die Prozedur Aktion erfolgreich abgeschlossen wurde, dann führt der Handler-Effekt. Es folgt eine Liste der drei möglichen Behandlungseffekte:

  • FORTSETZENWeiter Ausführung unmittelbar nach der Aussage, dass der Handler verursacht aufgerufen werden.

  • AUSGANGAusführung fortsetzen, nachdem die zusammengesetzte Anweisung, den Handler enthält.

  • RÜCKGÄNGIG MACHENLösen Sie die Arbeit der früheren Erklärungen in der zusammengesetzten Anweisung und dann weiter die Ausführung nach der Anweisung, die den Handler enthält.

Wenn kann der Handler korrigieren, was Problem der Handler aufgerufen, dann ist die FORTSETZEN Wirkung angemessen sein. Das AUSGANG Effekt kann angebracht sein, wenn die Prozedur nicht das Problem zu beheben, aber die zu der zusammengesetzten Anweisung vorgenommenen Änderungen nicht mehr rückgängig gemacht werden müssen. Das RÜCKGÄNGIG MACHEN Effekt ist geeignet, wenn Sie die Datenbank in den Zustand war es in zurückkehren wollen, bevor die Verbindung der Ausführung der Anweisung gestartet.

Betrachten Sie das folgende Beispiel:

BEGIN ATOMICDECLARE constraint_violation CONDITIONFOR SQLSTATE VALUE '23000' -DECLARE UNDO HANDLERFOR constraint_violationRESIGNAL -EINFÜGE INTO Studenten (StudentID, Fname, Lname) VALUES (: sid,: sfname,: slname) -EINFÜGE INTO Roster (ClassID, Klasse, StudentID) VALUES (: cid,: cname,: sid) -END -

Wenn eine der EINFÜGEN Aussagen verursacht eine Einschränkungsverletzung, wie versucht, einen Datensatz mit einem Primärschlüssel hinzuzufügen, die einen Primärschlüssel bereits in der Tabelle dupliziert, SQLSTATE nimmt einen Wert von '23000', setzt damit die constraint_violation Zustand zu einem wahren Wert.

Diese Aktion bewirkt, dass die Prozedur RÜCKGÄNGIG MACHEN Alle Änderungen, die entweder auf alle Tabellen vorgenommen wurden EINFÜGEN Befehl. Das RESIGNAL Anweisung überträgt die Steuerung zurück zu der Prozedur, die die momentan ausgeführte Prozedur aufgerufen.

wenn sowohl EINFÜGEN Anweisungen ausführen erfolgreich, wird die Ausführung mit der Anweisung nach der ENDE Stichwort.

Das ATOMIC Stichwort ist zwingend erforderlich, wenn ein Handler Effekt RÜCKGÄNGIG MACHEN. Dies ist nicht der Fall für Handler, deren Wirkung entweder FORTSETZEN oder AUSGANG.

Menü