ホームページ  >  記事  >  データベース  >  トランザクションの実装後に MySQL ストアド プロシージャが失敗するのはなぜですか?

トランザクションの実装後に MySQL ストアド プロシージャが失敗するのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-24 23:06:31753ブラウズ

Why is My MySQL Stored Procedure Failing After Implementing Transactions?

MySQL ストアド プロシージャでのトランザクションの実装

データの信頼性を高めるために、ユーザーが MySQL ストアド プロシージャ内でトランザクションを実装しようとしました。 。ただし、変更によりこの手順は機能しなくなってしまいました。ドキュメントを参照したりオンラインで検索したにもかかわらず、ユーザーはエラーを特定できませんでした。

提供されたコードを調べると、2 つの構文エラーがあることが明らかです:

  1. 終了ハンドラーにカンマがありません: SQL 例外および警告の終了ハンドラーには、条件を区切るカンマが必要です。適切な構文の指示: DECLARE EXIT HANDLER FOR SQLEXCEPTION SQLWARNING の代わりに DECLARE EXIT HANDLER FOR SQLEXCEPTION SQLWARNING.
  2. 終了ハンドラーのセミコロンがありません: 終了ハンドラーを終了する END ステートメントにも従う必要があります。他のステートメントと同様に、セミコロンで区切ります。これは次のようになります: END;

これらの構文エラーが修正されると、プロシージャは意図したとおりに機能し、ユーザーがトランザクションをシームレスに実装できるようになります。修正されたコードは次のようになります:

<code class="sql">BEGIN

DECLARE poid INT;

DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
BEGIN
    ROLLBACK;
END;

START TRANSACTION;

    -- ADD option 5
    INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,5,0);
    SET poid = (SELECT LAST_INSERT_ID());
    INSERT INTO product_option_value(product_option_id,product_id,option_id,option_value_id,quantity,subtract,price,price_prefix,points,points_prefix,weight,weight_prefix) VALUES(poid,insertedProductID,5,50,0,0,4.99,'+',0,'+',0,'+');

    -- ADD option 12
    INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,12,1);

    -- ADD option 13
    INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,13,0);

COMMIT;

END</code>

以上がトランザクションの実装後に MySQL ストアド プロシージャが失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。