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

Используйте это вместо:

new StreamWriter("c:\\file.txt", true);

С этой перегрузкой конструктора StreamWriter вы выбираете, добавляете ли вы файл или перезаписываете его.

C # 4 и выше предлагает следующий синтаксис, который некоторые находят более читаемыми:

new StreamWriter("c:\\file.txt", append: true);
61
задан dolmen 9 December 2015 в 14:18
поделиться

4 ответа

Необходимо определить обработчики исключений. Смотрите на http://dev.mysql.com/doc/refman/5.0/en/declare-handler.html

0
ответ дан Jorge Niedbalski R. 9 December 2015 в 14:18
поделиться

В MySQL 5 можно повысить ошибку путем вызова хранимой процедуры, которая не существует (НАЗОВИТЕ raise_error), или передача недопустимого значения к запросу (как пустой указатель к NOT NULL ограничил поле). Вот интересное сообщение Roland Bouman при повышении ошибок из функции MySQL:

http://rpbouman.blogspot.com/2005/11/using-udf-to-raise-errors-from-inside.html

5
ответ дан 24 November 2019 в 16:46
поделиться

Вы также можете вызвать существующую функцию с недопустимым числом аргументов.

2
ответ дан 24 November 2019 в 16:46
поделиться

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

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. | 
+----------------------------------------------------+
25
ответ дан 24 November 2019 в 16:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: