2013-05-09 101 views
1

我想通过存储过程获得下一个可用的id,但到目前为止我无法使其工作。这是我的存储过程结果包含多个行错误mysql

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)我得到一个错误的结果包括多行的

回答

3

此错误可能意味着您要么在表中具有相同的TranID的多个条目,要么在表journaltype中具有相同的JournalType的多个条目。

使用SELECT...INTO...语法时,您必须确保返回的结果集不会是而是由多行组成。

+1

林相当肯定,将被检索的值只是一个单一的条目。列tranid是一个独特的关键。 – John 2013-05-09 08:56:02

+0

类型是否与您尝试运行'SELECT'语句“手动”(并且没有'INTO'部分)并查看返回的内容? – gkalpak 2013-05-09 09:41:57

+1

是。它返回一个单一的值。 – John 2013-05-09 10:27:33