stored funciones ejercicios declarar crear arreglos array mysql function exception stored-procedures

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



funciones en mysql ejercicios (6)

Creé una función MySQL y me gustaría generar un error si los valores pasados ​​para los parámetros no son válidos. ¿Cuáles son mis opciones para generar un error dentro de una función MySQL?


¿Por qué no simplemente almacenar un VARCHAR en una variable INTEGER declarada?

DELIMITER $$ DROP FUNCTION IF EXISTS `raise_error` $$ CREATE FUNCTION `raise_error`(MESSAGE VARCHAR(255)) RETURNS INTEGER DETERMINISTIC BEGIN DECLARE ERROR INTEGER; set ERROR := MESSAGE; RETURN 0; END $$ DELIMITER ; -- set @foo := raise_error(''something failed''); -- or within a query

Mensaje de error es:

Valor entero incorrecto: ''algo falló'' para la columna ''ERROR'' en la fila 1

No es perfecto, pero da un mensaje bastante descriptivo y no tiene que escribir ninguna extensión DLL.




En realidad es una combinación de las tres respuestas. Llama a un procedimiento inexistente para generar el error y luego declara un controlador de salida que detecta el error que generó. Aquí hay un ejemplo, usando SQLSTATE 42000 (el procedimiento no existe) para lanzar un error antes de la eliminación si la fila que se va a eliminar tiene un conjunto de identificación de clave externa:

DROP PROCEDURE IF EXISTS decount_test; DELIMITER // CREATE DEFINER = ''root''@''localhost'' PROCEDURE decount_test ( p_id bigint ) DETERMINISTIC MODIFIES SQL DATA BEGIN DECLARE EXIT HANDLER FOR SQLSTATE ''42000'' SELECT ''Invoiced barcodes may not have accounting removed.''; IF (SELECT invoice_id FROM accounted_barcodes WHERE id = p_id ) THEN CALL raise_error; END IF; DELETE FROM accounted_barcodes WHERE id = p_id; END // DELIMITER ;

Salida:

call decount_test(123456); +----------------------------------------------------+ | Invoiced barcodes may not have accounting removed. | +----------------------------------------------------+ | Invoiced barcodes may not have accounting removed. | +----------------------------------------------------+


MySQL 5.5 introduce señales, que son similares a las excepciones en otros idiomas:

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

Por ejemplo, en el cliente de línea de comandos mysql :

mysql> SIGNAL SQLSTATE ''45000'' SET MESSAGE_TEXT = ''Custom error''; ERROR 1644 (45000): Custom error


También puede llamar a una función existente con un número inválido de argumentos.