У меня есть хранимая процедура, которая больше не работает в MySQL 8.0.17 из-за того, что обработчик выхода перехватил предупреждение и вышел из блока.Я предполагаю, что ошибка генерируется из-за переменной @transql, но я не уверен на 100%.Основная проблема заключается в том, что вызываемый хранимый процесс никогда не достигает его из-за выхода.
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| @p1 | @p2 |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| HY000 | Setting user variables within expressions is deprecated and will be removed in a future release. Consider alternatives: 'SET variable=expression, ...', or 'SELECT expression(s) INTO variables(s)'. |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Я проверил несколько других вопросов, но не смог перевести их в этот запрос.
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION, sqlwarning
BEGIN
GET DIAGNOSTICS CONDITION 1 @p1 = RETURNED_SQLSTATE, @p2 = MESSAGE_TEXT;
ROLLBACK;
END;
START TRANSACTION;
SET @key1 = key1;
SET @transkey = transkey;
SET @transql = CONCAT('SELECT @cckey:=cckey FROM `', key1,
'_kr` AS t1 WHERE `transkey` = ?');
PREPARE stmt FROM @transql;
EXECUTE stmt
USING @transkey;
DEALLOCATE PREPARE stmt;
CALL sp_procedure1(key1, @cckey, @transkey)
COMMIT;
END