mysql - 不正确的整数值:第 2 行 MySQL 中列“变量”的“H”
问题描述
我在 MySQL 中有一个存储过程
CREATE PROCEDURE insertFromJunction ()
BEGIN
DECLARE iteration INT DEFAULT NULL;
DECLARE adjacentID INT DEFAULT 0;
DECLARE junction VARCHAR(20) DEFAULT 0;
SET junction = 'H';
SET iteration = 1;
loop2: LOOP
SET adjacentID = (SELECT junction FROM Hybrid WHERE Hybrid_ID = iteration);
IF iteration = 2 THEN LEAVE loop2; --it can even be 1,3 etc
END IF;
SET iteration = iteration + 1;
END LOOP loop2;
END;
$$
现在这里是混合表
Hybrid_ID N K J H
1 15 10 11 9
2 13 15 5 7
3 20 16 4 10
4 NULL NULL 3 NULL
5 NULL NULL 2 NULL
6 NULL NULL NULL NULL
所以,基本上应该发生的是循环第一次运行adjacenID = 9
,然后iteration = 1+1=2
。
然后循环第二次运行adjacentID = 7
并且循环应该终止(从 IF)。但是有一个错误,它是在SET
执行状态时发生的。
Error Code: 1366. Incorrect integer value: 'H' for column 'adjacentID' at row 2
做错了什么。我也检查了所有数据类型。
即使设置了终止条件,该错误仍然存在,iteration = 1
这让我感到怀疑,因为row 2
在这种情况下没有意义。
解决方案
CREATE PROCEDURE insertFromJunction ()
BEGIN
-- Initialize needed user-defined variables
SET @junction = 'H';
SET @iteration = 1;
loop2: LOOP
-- Build query text
SET @adjacentID = CONCAT( 'SELECT ',
@junction,
' FROM Hybrid WHERE Hybrid_ID = ',
@iteration);
-- Prepare and execute the query
PREPARE stmt FROM @adjacentID;
EXECUTE stmt;
DROP PREPARE stmt;
-- Debug exit
IF @iteration = 2 THEN
LEAVE loop2;
END IF;
-- increase iterator
SET @iteration = @iteration + 1;
END LOOP loop2;
END
推荐阅读
- android - android 中是否有标准/推荐的方式(或库)我应该使用 Kotlin 执行 GET、PUT、POST 和 DELETE 请求?
- itext7 - 使用 iText 合并目录中的所有 Pdf 文件
- ios - Xamarin 表单检测屏幕是否处于活动状态和/或设备锁定
- python - UDF 中的 Pyspark 和局部变量
- c# - C#成员变量和传递给方法的参数之间的区别
- c++ - c++ 使用 getline() 读取文件并正确格式化输出的问题
- python - 代码返回错误?(Python)itemconfigure 没有定义?
- android - FLAG_LAYOUT_NO_LIMITS 用于自定义状态栏使导航栏重叠
- azure-iot-edge - IoT Edge:设备无法从 Azure Container Registry 下载我的模块,但可以从 dockerhub
- javascript - 如何在 Bootstrap Popover 中启用 Bootstrap 4 Carousel