2010-08-24 9 views
8

Ich habe ein SQL-Skript, um gegen eine große Datenbank zu laufen. Ich würde gerne ein paar einfache Fragen an den Anfang stellen, genau wie eine Plausibilitätsprüfung.Behauptung in MySQL

Gibt es eine Möglichkeit, eine Assertion in MySQL zu schreiben? Oder irgendeine Art von "Auswählen ..., und wenn es nicht mit diesem Wert übereinstimmt, dann brechen Sie das gesamte Skript ab"?

+0

Mehr Details - was genau suchen Sie für die Entscheidungslogik - eine Tabelle, Spalte, spezifischer Wert? –

+1

Ich bin in diesem Punkt etwas flexibel, da ich nur sicherstellen möchte, dass es die richtige Datenbank ist, und die Daten sind nicht fürchterlich falsch. Es wäre großartig, ein count (*) oder min (Feld) (in einem bestimmten Bereich) zu betrachten oder das Feld <> 'const' oder etwas anderes zu aktivieren. – Ken

Antwort

3

Sie können das Skript in einer if-Anweisung gesetzt, je nachdem, welche Art von Wert, den Sie überprüfen müssen, hier ein Beispiel:

DECLARE @value int 
SET @value = (SELECT COUNT(*) FROM dbo) 

IF @value >0 
BEGIN 
--Do Stuff Here 
END 
+2

MySQL lässt frustrierend keinen Kontrollfluss außerhalb gespeicherter Programme zu. – Deebster

+0

@Brett, Dies funktioniert nicht für MySQL. Siehe die Antworten unten. – Pacerier

1

Sie können dies auch über eine gespeicherte Prozedur/Funktion als im folgenden Beispiel:

CREATE FUNCTION `RunProcess`() RETURNS INT(11) 
runProcess:BEGIN 

DECLARE check_value INT; 
DECLARE error_code INT; 

SELECT COUNT(*) FROM dbo INTO check_value; 

IF check_value = 0 THEN set error_code = 666; 
    LEAVE runProcess; 
    RETURN error_code; 
END IF; 

... 
... 
END; 
+0

Dies könnte zu einem Problem führen, wenn Sie versuchen, auch andere Sprocs auszuführen ........... – Pacerier

5

Irgendein verrückter Code. Hauptpunkt ist: SET könnte Fehler für mysql Variablen auslösen.

Zum Beispiel.

SET @value = 0; 
SET SESSION sql_mode = if(@value, @@SESSION.sql_mode, 'something wrong uphere'); 

ausgeben würde ERROR 1231 (42000): Variable 'sql_mode' can't be set to the value of 'something wrong uphere' und Ausführung würde gestoppt werden.

Dieser Ansatz ist nicht semantisch, aber es funktioniert.

+0

Ingenious ~! Was sind andere Tricks? – Pacerier

Verwandte Themen