J'ai une question très simple mais je n'ai pas eu de code simple pour quitter SP en utilisant Mysql. Quelqu'un peut-il partager avec moi comment faire cela?
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
la source
la source
IF tablename IS NOT NULL THEN
...;)Réponses:
la source
END proc_label;
syntaxe (indiquée dans la plupart des exemples officiels de MySQL) n'est pas nécessaire. (c'est un excellent moyen de commenter un processus stocké sans avoir à faire défiler vers le bas pour le mettre*/
en place)LEAVE this_proc;
ça sonne parfait!return <value>
renvoyer une valeur.:
etBEGIN
commeproc_label:BEGIN
une erreur de syntaxe pendant leproc_label: BEGIN
travail.Si vous souhaitez une "sortie anticipée" pour une situation dans laquelle il n'y a pas eu d'erreur, utilisez la réponse acceptée publiée par @piotrm. Le plus souvent, cependant, vous serez renfloué en raison d'une condition d'erreur (en particulier dans une procédure SQL).
À partir de MySQL v5.5, vous pouvez lever une exception. Annulation des gestionnaires d'exceptions, etc. qui obtiendront le même résultat, mais d'une manière plus propre et plus poignante.
Voici comment:
Remarque
SQLSTATE '45000'
équivaut à une "condition d'exception définie par l'utilisateur non gérée". Par défaut, cela produira un code d'erreur de1644
(qui a la même signification). Notez que vous pouvez lancer d'autres codes de condition ou codes d'erreur si vous le souhaitez (ainsi que des détails supplémentaires pour la gestion des exceptions).Pour en savoir plus sur ce sujet, consultez:
https://dev.mysql.com/doc/refman/5.5/en/signal.html
Comment signaler une erreur dans une fonction MySQL
http://www.databasejournal.com/features/mysql/mysql-error-handling-using-the-signal-and-resignal-statements.html
Addenda
En relisant mon article, j'ai réalisé que j'avais quelque chose de plus à ajouter. Avant MySQL v5.5, il y avait un moyen d'émuler la levée d'une exception. Ce n'est pas exactement la même chose, mais c'était l'analogue: créer une erreur en appelant une procédure qui n'existe pas. Appelez la procédure par un nom qui est significatif afin d'obtenir un moyen utile de déterminer quel était le problème. Lorsque l'erreur se produit, vous verrez la ligne d'échec (en fonction de votre contexte d'exécution).
Par exemple:
CALL AttemptedToInsertSomethingInvalid;
Notez que lorsque vous créez une procédure, aucune validation n'est effectuée sur de telles choses. Ainsi, alors que dans quelque chose comme un langage compilé, vous ne pourriez jamais appeler une fonction qui n'était pas là, dans un script comme celui-ci, elle échouera simplement à l'exécution, ce qui est exactement ce que l'on souhaite dans ce cas!
la source
Pour gérer cette situation de manière portable (c'est-à-dire qu'elle fonctionnera sur toutes les bases de données car elle n'utilise pas l'étiquette MySQL Kung fu), divisez la procédure en parties logiques, comme ceci:
la source
Pourquoi pas ça:
la source
if
instruction. C'est logiquement identique à un «retour anticipé».Cela fonctionne pour moi:
la source
la source