Ich habe eine sehr einfache Frage, aber ich habe keinen einfachen Code zum Beenden von SP mit MySQL erhalten. Kann mir jemand mitteilen, wie das geht?
CREATE PROCEDURE SP_Reporting(IN tablename VARCHAR(20))
BEGIN
IF tablename IS NULL THEN
#Exit this stored procedure here
END IF;
#proceed the code
END;
mysql
sql
stored-procedures
Joe Ijam
quelle
quelle
IF tablename IS NOT NULL THEN
...;)Antworten:
quelle
END proc_label;
Syntax (in den meisten offiziellen MySQL-Beispielen gezeigt) nicht benötigt wird. (Dies ist eine großartige Möglichkeit, einen gespeicherten Prozess zu kommentieren, ohne nach unten scrollen zu müssen, um ihn*/
LEAVE this_proc;
perfekt klingt!return <value>
einen Wert zurückgeben.:
undBEGIN
alsproc_label:BEGIN
Syntaxfehler während derproc_label: BEGIN
Arbeit ist Platz notwendig .Wenn Sie eine "vorzeitige Beendigung" für eine Situation wünschen, in der kein Fehler aufgetreten ist, verwenden Sie die akzeptierte Antwort von @piotrm. In der Regel werden Sie jedoch aufgrund einer Fehlerbedingung (insbesondere in einer SQL-Prozedur) gerettet.
Ab MySQL v5.5 können Sie eine Ausnahme auslösen. Negieren von Ausnahmebehandlungsroutinen usw., die das gleiche Ergebnis erzielen, jedoch sauberer und ergreifender.
Hier ist wie:
Hinweis
SQLSTATE '45000'
entspricht "Nicht behandelte benutzerdefinierte Ausnahmebedingung". Standardmäßig wird ein Fehlercode von erzeugt1644
(der dieselbe Bedeutung hat) erzeugt. Beachten Sie, dass Sie bei Bedarf andere Bedingungscodes oder Fehlercodes auslösen können (plus zusätzliche Details für die Ausnahmebehandlung).Weitere Informationen zu diesem Thema finden Sie unter:
https://dev.mysql.com/doc/refman/5.5/en/signal.html
So lösen Sie einen Fehler in einer MySQL-Funktion aus
http://www.databasejournal.com/features/mysql/mysql-error-handling-using-the-signal-and-resignal-statements.html
Nachtrag
Als ich meinen Beitrag noch einmal las, wurde mir klar, dass ich noch etwas hinzufügen musste. Vor MySQL v5.5 gab es eine Möglichkeit, das Auslösen einer Ausnahme zu emulieren. Es ist nicht genau dasselbe, aber dies war das Analoge: Erstellen Sie einen Fehler, indem Sie eine Prozedur aufrufen, die nicht existiert. Rufen Sie die Prozedur unter einem aussagekräftigen Namen auf, um ein nützliches Mittel zu erhalten, mit dem Sie das Problem ermitteln können. Wenn der Fehler auftritt, wird die Fehlerzeile angezeigt (abhängig von Ihrem Ausführungskontext).
Beispielsweise:
CALL AttemptedToInsertSomethingInvalid;
Beachten Sie, dass beim Erstellen einer Prozedur keine Validierung für solche Dinge durchgeführt wird. Während Sie in so etwas wie einer kompilierten Sprache niemals eine Funktion aufrufen könnten, die nicht vorhanden war, schlägt sie in einem Skript wie diesem einfach zur Laufzeit fehl, was genau das ist, was in diesem Fall gewünscht wird!
quelle
Um diese Situation auf tragbare Weise zu handhaben (dh auf allen Datenbanken zu funktionieren, da das MySQL-Label Kung Fu nicht verwendet wird), teilen Sie die Prozedur wie folgt in logische Teile auf:
quelle
Warum nicht das:
quelle
if
Anweisung. Es ist logisch identisch mit einer "frühen Rückkehr".Das funktioniert bei mir:
quelle
quelle