Saltar al contenido

Mysql – Cómo salir/salir del procedimiento almacenado

Después de de nuestra prolongada búsqueda de datos hemos podido resolver esta dificultad que suelen tener ciertos usuarios. Te ofrecemos la solución y deseamos serte de mucha apoyo.

Solución:

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;

Si desea una “salida anticipada” para una situación en la que no hubo error, use la respuesta aceptada publicada por @piotrm. Sin embargo, lo más habitual es que se achique 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 controladores de excepciones, etc. que lograrán el mismo resultado, pero de una manera más limpia y precisa.

Así es cómo:

DECLARE CUSTOM_EXCEPTION CONDITION FOR SQLSTATE '45000';

IF  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 más información sobre este tema, consulta:

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 el lanzamiento de una excepción. No es exactamente lo mismo, pero este era el análogo: crear 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 era el problema. Cuando ocurra el error, podrá ver la línea de falla (dependiendo de su 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, mientras que en algo como un lenguaje compilado, nunca 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!

Para manejar esta situación de forma portátil (es decir, funcionará en todas las bases de datos porque no usa la etiqueta Kung fu de MySQL), divida 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;

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *