2

MySQL ストアド プロシージャ

DELIMITER $$

USE `RMS`$$

DROP PROCEDURE IF EXISTS `posTransactionEntry`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `posTransactionEntry`(OUT trxID INT)
BEGIN

DECLARE trxID INT;

INSERT INTO `RMS`.`transaction`
(`MemberID`,`UserID`,`Type`,`UID`)
VALUES (NULL,1,0,'56c54e5c-075d-458d-9845-cf410f8a60ec');

SET trxID=(SELECT ID FROM `transaction` WHERE `transaction`.`UID`='56c54e5c-075d-458d-9845-cf410f8a60ec');
INSERT INTO `RMS`.`transactionentry`
        (
         `TransactionID`,
         `ItemID`,
         `Quantity`,
         `Unitcost`,
         `Price`,
         `SoldPrice`,
         `ReasonID`)
VALUES (trxID,28,10,23.23,10,10,NULL);
UPDATE `transaction` SET `transaction`.`UID`=0 WHERE `transaction`.`ID`=trxID;

END$$

DELIMITER ;

このストアド プロシージャには 4 つのステートメントがあります。エラーが発生した場合、どのステートメントエラーが発生したか、特定のステートメントが正常に実行されたことを確認する方法。エラーが発生した場合、どのステートメントがエラーを生成したかを知る方法と、それに応じて実行されたすべてのステートメントをロールバックする方法を知ることができます。

一貫性と確実性を意味します, どうすれば達成できますか?

4

1 に答える 1

1

エラーを回避できると思われる各ステートメントをBEGIN and ENDブロックに入れます。

ブロックでスローされたエラーをキャッチし、エラーが実際に発生した場所を示す変数を割り当てることができます。

のドキュメントと例は、ここBEGIN and ENDにあります。

のリストは ここerror codesにあります。

UPDATEステートメントによって更新された行数を知る関数は、ここにあります。

于 2012-06-09T15:14:58.013 に答える