powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / экспертиза по HANDLER
2 сообщений из 2, страница 1 из 1
экспертиза по HANDLER
    #39169837
tommas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую всех!

Поставлена задача по написанию процедуры, которая должна на выходе получать значение параметра P_RES:
0 - ошибка в процессе выполнения процедуры;
1 - товар обновлен;
2 - товар создан.

Для решения задачи добавил обработчик ошибок (DECLARE EXIT HANDLER FOR...).

Процедура:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
DELIMITER $$
CREATE PROCEDURE `IMPORT_GOODS`(IN `P_ID_GOODS` BIGINT, IN `P_NAME` VARCHAR(256), IN `P_ID_PRODUCER` BIGINT, OUT `P_RES` INT)

BEGIN  
	DECLARE P_ROW_EXISTS INT;
				
	DECLARE EXIT HANDLER FOR SQLEXCEPTION SET P_RES = 0;
	DECLARE EXIT HANDLER FOR SQLSTATE '02000' SET P_RES = 0;
	DECLARE EXIT HANDLER FOR SQLSTATE '23000' SET P_RES = 0;
	DECLARE EXIT HANDLER FOR 1452 SET P_RES = 0;  

	SET P_ROW_EXISTS = (SELECT COUNT(*) FROM goods WHERE 1 = 1 AND id_goods = P_ID_GOODS);
   	
	IF P_ROW_EXISTS = 1 THEN
		BEGIN 
            UPDATE goods
			SET name = P_NAME,
				id_producer = P_ID_PRODUCER,
			WHERE 
				id_goods = P_ID_GOODS;
            SET P_RES = 1;    
		END;
	
	ELSE
		BEGIN 
			INSERT INTO goods (id_goods, name, id_producer)
			VALUES (
				P_ID_GOODS,
				P_NAME,
				P_ID_PRODUCER);
			SET P_RES = 2; 
		END;
	END IF;
END$$

DELIMITER ;


Проблематика:
- при выполнении процедуры с неправильными значениями параметров (например, с неверным значением P_ID_PRODUCER) не удается получить в ответе значение P_RES = 0. Получаю сообщение с ошибкой:
Код: plaintext
1.
 #1452 - Cannot add or update a child row: a foreign key constraint fails (`goods`, CONSTRAINT `goods_producer_r_1` FOREIGN KEY (`id_producer`) REFERENCES `producer` (`id_producer`)). 

Вопрос:
Как заставить работать обработчик ошибок, чтобы получать в ответ не сообщение с ошибкой, а значение 0 ?
...
Рейтинг: 0 / 0
экспертиза по HANDLER
    #39170260
tommas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема найдена и заключается в ошибке работы HANDLER внутри MySQL (замечалась на версии mysql 5.6. у хостинг-провайдера) - отловить данный хендлер нельзя.
Начиная с версии MySQL 5.7.2 данная ошибка устранена https://bugs.mysql.com/bug.php?id=68831.

Поставил mysql 5.7.11 и HANDLER отлавливается теперь.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / экспертиза по HANDLER
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]