2013-05-09 98 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