Mysql - comment quitter/quitter la procédure stockée
j'ai une question très simple mais je n'ai pas obtenu de code simple pour sortir de SP en utilisant Mysql. Quelqu'un peut-il partager avec moi comment faire?
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;
5 réponses
CREATE PROCEDURE SP_Reporting(IN tablename VARCHAR(20))
proc_label:BEGIN
IF tablename IS NULL THEN
LEAVE proc_label;
END IF;
#proceed the code
END;
il n'y a pas moyen: Les génies de MySQL n'ont pas pensé qu'il était nécessaire - ils préfèrent massivement long si les blocs à l'élégant" exit early " modèle de codage.
cependant, pour gérer cette situation (que j'ai utilisée à bon effet dans le passé) est de briser la procédure en parties logiques, comme ceci:
CREATE PROCEDURE SP_Reporting(IN tablename VARCHAR(20))
BEGIN
IF tablename IS NOT NULL THEN
CALL SP_Reporting_2(tablename);
END IF;
END;
CREATE PROCEDURE SP_Reporting_2(IN tablename VARCHAR(20))
BEGIN
#proceed with code
END;
si vous voulez une" sortie anticipée " pour une situation dans laquelle il n'y a pas d'erreur, alors utilisez la réponse acceptée Postée par @piotrm. Plus généralement, cependant, vous serez puisage en raison d'une condition d'erreur (surtout dans une procédure SQL).
à partir de MySQL v5.5 vous pouvez faire une exception. Négation de l'exception handlers, etc. cela aboutira au même résultat, mais d'une manière plus propre, plus poignante.
Voici comment:
DECLARE CUSTOM_EXCEPTION CONDITION FOR SQLSTATE '45000';
IF <Some Error Condition> THEN
SIGNAL CUSTOM_EXCEPTION
SET MESSAGE_TEXT = 'Your Custom Error Message';
END IF;
Note SQLSTATE '45000'
signifie "condition d'exception définie par l'utilisateur". Par défaut, cela produira un code d'erreur de 1644
(qui a la même signification). Notez que vous pouvez jeter d'autres codes d'état ou codes d'erreur si vous voulez (plus des détails supplémentaires pour le traitement des exceptions).
pour en savoir plus à ce sujet, consultez:
https://dev.mysql.com/doc/refman/5.5/en/signal.html
Comment élever une erreur dans une base de données MySQL fonction
pourquoi pas:
CREATE PROCEDURE SP_Reporting(IN tablename VARCHAR(20))
BEGIN
IF tablename IS NOT NULL THEN
#proceed the code
END IF;
# Do nothing otherwise
END;
MainLabel:BEGIN
IF (<condition>) IS NOT NULL THEN
LEAVE MainLabel;
END IF;
....code
i.e.
IF (@skipMe) IS NOT NULL THEN /* @skipMe returns Null if never set or set to NULL */
LEAVE MainLabel;
END IF;