Как вызвать ошибку в функции MySQL

На самом деле это комбинация exception-handling всех трех ответов. Вы вызываете mysqlclient несуществующую процедуру, чтобы mysqldump вызвать ошибку, а затем объявляете mysql обработчик выхода, который mysqlclient перехватывает сгенерированную mysqldump вами ошибку. Вот пример использования mysqldump SQLSTATE 42000 (процедура exceptions не существует) для выдачи exception ошибки перед удалением, если functions для удаляемой строки установлен mysql-query идентификатор внешнего ключа:

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 ;

Вывод:

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

mysql

function

exception

stored-procedures

2022-09-19T15:50:25+00:00