152 votes

Mysql - Comment quitter / quitter une procédure stockée

J'ai une question très simple mais je n'ai pas obtenu 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;
 

240voto

piotrm Points 5420
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;

14voto

Bohemian Points 134107

Il n'y a pas de moyen: les génies de MySQL ne pensaient pas que c'était nécessaire - ils préfèrent énormément de temps si les blocs bloquent l'élégant modèle de codage "exit early".

Cependant, gérer cette situation (que j’avais utilisée à bon escient dans le passé) revient à scinder 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;
 

2voto

Stephen Points 11761

Pourquoi pas ceci:

 CREATE PROCEDURE SP_Reporting(IN tablename VARCHAR(20))
BEGIN
     IF tablename IS NOT NULL THEN
          #proceed the code
     END IF;
     # Do nothing otherwise
END;
 

0voto

bluecollarcoder Points 430

MySQL vous donne le moyen de quitter une procédure. Je ne sais pas pourquoi personne d'autre ne l'a essayé.

 CREATE PROCEDURE SP_Reporting(IN tablename VARCHAR(20))
proc:BEGIN
    IF tablename IS NULL THEN
        LEAVE proc;
    END IF;

    #proceed with the code
END;
 

Le mot clé LEAVE vous permet de sortir d'un bloc étiqueté, y compris du corps de la procédure. Cela semble être pris en charge depuis la version 5.0: http://dev.mysql.com/doc/refman/5.0/fr/leave.html .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X