MySqlで
UPDATE `inventoryentry` SET `Status` = 1 WHERE `InventoryID`=92 AND `ItemID`=28;
これは、inventoryID=92およびitemID=28の1つの行のみを正常に更新し、次のメッセージが表示されます。
1 row(s) affected
これをストアドプロシージャに配置すると、次のようになります
CREATE DEFINER=`root`@`localhost` PROCEDURE `Sample`(IN itemId INT, IN itemQnty
DOUBLE, IN invID INT)
BEGIN
DECLARE crntQnty DOUBLE;
DECLARE nwQnty DOUBLE;
SET crntQnty=(SELECT `QuantityOnHand` FROM `item` WHERE id=itemId);
SET nwQnty=itemQnty+crntQnty;
UPDATE `item` SET `QuantityOnHand`=nwQnty WHERE `Id`=itemId;
UPDATE `inventoryentry` SET `Status` = 1 WHERE `InventoryID`=invID AND
`ItemID`=itemId;
END$$
ストアドプロシージャの呼び出し
CALL Sample(28,10,92)
1行だけを更新するのではなく、ItemIDを無視してInventoryID (つまり、92)に対してinventoryentryのすべてのステータス=1を更新します。次のメッセージが表示されます!
5 row(s) affected
ストアドプロシージャが更新ステートメントのitemIDを無視するのはなぜですか?またはなぜストアドプロシージャが複数回更新されるのですか?ただし、ストアドプロシージャがなくても、正常に機能します。