首页 > 解决方案 > 不正确的整数值:第 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在这种情况下没有意义。

标签: mysqlsql

解决方案


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

推荐阅读