Mysql 结果由多行错误组成

Mysql 结果由多行错误组成,mysql,Mysql,我正试图通过存储过程获取下一个可用id,但到目前为止,我无法使其正常工作。这是我的存储过程 DELIMITER $$ USE `devt`$$ DROP PROCEDURE IF EXISTS `updateid`$$ CREATE DEFINER=`root`@`%` PROCEDURE `updateid`(IN `tran_id` VARCHAR(15), IN `typ` VARCHAR(15), OUT `lid` VARCHAR(15)) BEGIN DECLARE id VA

我正试图通过存储过程获取下一个可用id,但到目前为止,我无法使其正常工作。这是我的存储过程

DELIMITER $$

USE `devt`$$

DROP PROCEDURE IF EXISTS `updateid`$$

CREATE DEFINER=`root`@`%` PROCEDURE `updateid`(IN `tran_id` VARCHAR(15), IN `typ` VARCHAR(15), OUT `lid` VARCHAR(15))
BEGIN
DECLARE id VARCHAR(15);
SET id =  '';
SELECT TranID FROM journal WHERE TranID = tranid INTO id;
read_loop: LOOP
            SELECT TranID FROM journal WHERE TranID = id INTO id;
    IF id = tran_id THEN
        UPDATE journaltype SET journaltype.NextRefNbr = journaltype.NextRefNbr + 1 WHERE journaltype.JournalType = typ;
        SELECT journaltype.NextRefNbr FROM journaltype WHERE journaltype.JournalType = typ INTO id;
        ITERATE read_loop;
    ELSE
        SET lid= id;
        LEAVE read_loop;
    END IF;
END LOOP;
END$$

DELIMITER ;**strong text**

当我运行查询调用updateid('17000001','GJ',@test)时,我得到一个由多行组成的错误结果

此错误可能意味着您在表
日志
中有多个具有相同
TranID
的条目,或者在表
日志类型
中有多个具有相同
日志类型
的条目


使用
SELECT…INTO…
语法时,您必须确保返回的结果集不会包含多行。

我非常确定将检索的值只是一个条目。列tranid是唯一的键。类型也一样。您是否尝试过“手动”运行
SELECT
语句(并且没有
进入
-部分)并查看返回的内容?是的。它返回了一个值。@John抱歉,我尝试了我所能想到的一切,但当
journal.TranID
journaltype.journaltype
中没有重复项时,它仍能正常工作,当其中一个字段上有多个具有相同值的条目时,会抛出“结果由多行组成”错误。您可以尝试将
限制1
(在
之前添加到
)添加到所有
SELECT
查询中,看看这是否解决了问题。现在可以使用了。我忘了将TranID=TranID的日志中的SELECT TranID替换为id;从日志中选择TranID,其中TranID=tran_id为id;我还对代码做了一些修改