1

我正在尝试通过存储过程获取下一个可用的 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**

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

4

2 回答 2

4

此错误可能意味着您在 table 中有多个相同的条目或 在TranIDtable中有多个相同的条目。journalJournalTypejournaltype

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

于 2013-05-09T08:53:37.607 回答
0

例如,您的SELECT语句之一返回多行,您需要更清楚地了解结果

而不是使用这个:

SELECT journaltype.NextRefNbr FROM journaltype WHERE journaltype.JournalType = typ INTO id;

用这个 :

SELECT journaltype.NextRefNbr FROM journaltype WHERE journaltype.JournalType = typ INTO id LIMIT 1;

这将解决您的错误!如果在 WHERE 子句中没有使用索引列,请尝试在每个 SELECT 语句中使用

于 2021-08-27T13:12:45.157 回答