2010-08-24 5 views
8

J'ai un script SQL à exécuter sur une grande base de données. Je voudrais poser quelques questions simples au début, juste comme une vérification de santé mentale.Assertion dans MySQL

Existe-t-il un moyen d'écrire une assertion dans MySQL? Ou tout type de "select ..., et s'il ne correspond pas à cette valeur, alors abandonner le script entier"?

+0

Plus de détails - que cherchez-vous exactement pour la logique de décision - une table, une colonne, une valeur spécifique? –

+1

Je suis un peu flexible sur ce point, puisque je veux juste m'assurer que c'est la bonne base de données, et que les données ne sont pas terriblement fausses. Regarder un compte (*) ou min (champ) (dans une plage particulière), ou s'assurer que le champ <> 'const', ou quelque chose, serait génial. – Ken

Répondre

3

Vous pouvez mettre tout le script dans une instruction if, selon le type de valeur que vous devez vérifier, voici un exemple:

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

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

MySQL ne permet pas le flux de contrôle en dehors des programmes stockés, de manière frustrante. – Deebster

+0

@Brett, Cela ne fonctionne pas pour MySQL. Voir les réponses ci-dessous. – Pacerier

1

Vous pouvez également le faire via une procédure/fonction stockée, comme dans l'exemple ci-dessous:

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

Cela peut créer un problème si vous essayez d'exécuter d'autres sprocs également ........... – Pacerier

5

Un code fou. Le point principal est: SET pourrait augmenter l'erreur pour les variables mysql.

Par exemple.

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

La sortie affichera ERROR 1231 (42000): Variable 'sql_mode' can't be set to the value of 'something wrong uphere' et l'exécution sera arrêtée.

Cette approche n'est pas sémantique mais cela fonctionne.

+0

Ingénieux ~! Quelles sont les autres astuces? – Pacerier

Questions connexes