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;
mysql
sql
stored-procedures
Joe Ijam
fuente
fuente
IF tablename IS NOT NULL THEN
...;)Respuestas:
fuente
END proc_label;
sintaxis (que se muestra en la mayoría de los ejemplos oficiales de MySQL) no es necesaria. (esto es una gran manera de crear un comentario en un procedimiento almacenado sin tener que desplazarse hasta la parte inferior de poner*/
en su lugar)LEAVE this_proc;
suena perfecto!return <value>
devolver un valor.:
yBEGIN
comoproc_label:BEGIN
dio error de sintaxis mientras seproc_label: BEGIN
trabaja.Si desea una "salida anticipada" para una situación en la que no hubo error, utilice la respuesta aceptada publicada por @piotrm. Sin embargo, lo más habitual es que esté rescatando debido a una condición de error (especialmente en un procedimiento SQL).
A partir de MySQL v5.5 puede lanzar una excepción. Negar los manejadores de excepciones, etc. que lograrán el mismo resultado, pero de una manera más limpia y conmovedora.
Así es cómo:
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 de1644
(que tiene el mismo significado). Tenga en cuenta que puede lanzar otros códigos de condición o códigos de error si lo desea (más 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
Apéndice
Mientras releía esta publicación mía, me di cuenta de que tenía algo más que agregar. Antes de MySQL v5.5, había una forma de emular lanzando una excepción. No es exactamente lo mismo, pero este fue el análogo: cree un error llamando a un procedimiento que no existe. Llame al procedimiento por un nombre que sea significativo para obtener un medio útil para determinar cuál fue el problema. Cuando se produce el error, podrá ver la línea de falla (dependiendo del contexto de ejecución).
Por ejemplo:
CALL AttemptedToInsertSomethingInvalid;
Tenga en cuenta que cuando crea un procedimiento, no se realiza ninguna validación en tales cosas. Entonces, si bien en algo así como un lenguaje compilado, nunca se podría llamar a una función que no estaba allí, en un script como este simplemente fallará en tiempo de ejecución, ¡que es exactamente lo que se desea en este caso!
fuente
Para manejar esta situación de manera portátil (es decir, funcionará en todas las bases de datos porque no usa la etiqueta de MySQL Kung fu), divida el procedimiento en partes lógicas, como esta:
fuente
¿Por qué no esto?
fuente
if
declaración. Es lógicamente idéntico a un "retorno temprano".Esto funciona para mi:
fuente
fuente