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;
101
demandé sur OMG Ponies 2011-06-07 06:44:00

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;
155
répondu piotrm 2011-06-07 03:29:43

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;
11
répondu Bohemian 2014-03-07 22:07:53

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

http://www.databasejournal.com/features/mysql/mysql-error-handling-using-the-signal-and-resignal-statements.html

3
répondu BuvinJ 2017-09-22 15:08:51

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;
1
répondu Stephen 2011-06-07 02:50:19
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;
0
répondu sdfor 2016-08-25 19:28:32