stored parameter leave example mysql sql stored-procedures

parameter - Mysql-Cómo salir/salir del procedimiento almacenado



leave mysql example (5)

Tengo una pregunta muy simple pero no obtuve ningún código simple para salir de SP usando Mysql. ¿Alguien puede compartir conmigo cómo hacer eso?

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;


¿Por qué no esto?

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


No hay una manera: los genios de MySQL no pensaron que era necesario; prefieren bloques masivamente largos para el elegante patrón de codificación de "salir temprano".

Sin embargo, manejar esta situación (que he utilizado con buenos resultados en el pasado) es dividir el procedimiento en partes lógicas, como esta:

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 desea una "salida anticipada" para una situación en la que no hubo ningún error, utilice la respuesta aceptada publicada por @piotrm. Lo más habitual, sin embargo, es que se achique debido a una condición de error (especialmente en un procedimiento de SQL).

A partir de MySQL v5.5 puede lanzar una excepción. Negar a los manejadores de excepciones, etc., que lograrán el mismo resultado, pero de una manera más limpia y conmovedora.

Así es cómo:

DECLARE CUSTOM_EXCEPTION CONDITION FOR SQLSTATE ''45000''; IF <Some Error Condition> THEN SIGNAL CUSTOM_EXCEPTION SET MESSAGE_TEXT = ''Your Custom Error Message''; END IF;

Nota SQLSTATE ''45000'' equivale a "Condición de excepción definida por el usuario no controlada". Por defecto, esto producirá un código de error de 1644 (que tiene el mismo significado). Tenga en cuenta que puede arrojar otros códigos de condición o códigos de error si lo desea (además de detalles adicionales para el manejo de excepciones).

Para obtener más información sobre este tema, consulte:

https://dev.mysql.com/doc/refman/5.5/en/signal.html

Cómo generar un error dentro de una función MySQL

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


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;


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;