2012-06-10 124 views
1

MySQL存儲過程MySQL的存儲過程總是返回輸出參數值= 0

DELIMITER $$ 

USE `RMS`$$ 

DROP PROCEDURE IF EXISTS `posHdrTrxEntry`$$ 

CREATE DEFINER=`root`@`localhost` PROCEDURE `posHdrTrxEntry`(

IN mbrID INT, 
IN usrID INT, 
IN unqID VARCHAR(50), 

OUT trxID INT 
) 
BEGIN 
DECLARE trxID INT; 

INSERT INTO `RMS`.`transaction` 
(`MemberID`,`UserID`,`UID`) 
VALUES (mbrID,usrID,unqID); 

IF ROW_COUNT() > 0 THEN 
SET trxID=(SELECT ID FROM `transaction` WHERE `transaction`.`UID`=unqID); 
END IF; 

IF trxID > 0 THEN 
UPDATE `transaction` SET `transaction`.`UID`=0 WHERE `transaction`.`ID`=trxID; 
END IF; 

END$$ 

DELIMITER ; 

爪哇--Code片段

Connection connection = null; 
    int trxID; 
    try { 
     connection = new DbService().getConnection(); 
CallableStatement cs = connection.prepareCall("{ CALL posHdrTrxEntry(?,?,?,?) }"); 
     cs.setString(1, null); 
     cs.setInt(2, item.getUserID()); 
     cs.setString(3, item.getUid()); 
     cs.registerOutParameter(4, java.sql.Types.INTEGER); 
     cs.execute(); 
     trxID=cs.getInt(4); 
     cs.close(); 

存儲過程總是返回輸出參數值= 0 ,即使存儲過程最後更新語句執行成功

IF trxID > 0 THEN 
UPDATE `transaction` SET `transaction`.`UID`=0 WHERE `transaction`.`ID`=trxID; 
END IF; 

它的意思是TrxID大於0,爲什麼我在java中只得到0的值?

編輯(圖片查看) enter image description here

回答

3

親愛只是刪除第一個聲明BEIGN

刪除以下內容:

DECLARE trxID INT; 

因爲這是OUT參數,u能只需使用SET來分配值。

我認爲它會正常工作!

+0

好吧,讓我檢查! –

+0

是的!工作正常。 –