Mysql 结果由多行错误组成
我正试图通过存储过程获取下一个可用id,但到目前为止,我无法使其正常工作。这是我的存储过程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
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;我还对代码做了一些修改