1

MySql ストアド プロシージャ

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 ;

Java -- コード スニペット

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 しか取得されないのはなぜですか?

編集 (画像表示) ここに画像の説明を入力

4

1 に答える 1

3

BEIGNの後の最初のステートメントを削除してください

以下を削除します。

DECLARE trxID INT;

これはoutパラメータであるため、uはSETを使用して値を割り当てることができます。

うまくいくと思います!

于 2012-06-10T07:02:07.780 に答える