sql >> データベース >  >> RDS >> Mysql

エラーを引き起こすトランザクションのMYSQLIfステートメント

    MySQLは、キーワードIFで始まるステートメントを認識しません 有効なSQLステートメントとして。

    IF ステートメントは、複合ステートメント(つまり、BEGINで囲まれたステートメントのブロック)のコンテキストでのみ機能します。 およびEND 。現在、複合ステートメントは、ストアドプログラム(ストアドプロシージャ、関数、またはトリガー)のコンテキストでのみサポートされています。

    http://dev.mysql.com/doc/refman /5.5/en/begin-end.html

    テストするには、試してください...

    DELIMITER //
    
    CREATE PROCEDURE usp_test_transaction()
    BEGIN
      DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
      START TRANSACTION;
    
      -- whatever DML operations and SELECT statements you want to perform go here
    
      IF (1=1) THEN
        COMMIT;
      ELSE
        ROLLBACK;
      END IF;
    END//
    
    DELIMITER ;
    
    CALL usp_test_transaction;
    

    (注:ここでは、トランザクションをストアドプロシージャ内で処理することを推奨していません。個人的な好みは、これを行わず、代わりに、より高いレベルでトランザクションを処理することです。ただし、上記の例は機能するはずです。MySQLはSTARTTRANSACTIONの呼び出しをサポートしていると思います。 、ストアドプロシージャのコンテキスト内でのCOMMITおよびROLLBACK。)




    1. PLS-00201識別子'PACKAGENAME.PROCEDURENAME'を宣言する必要があります

    2. メールアドレスからドメイン名を選択する方法

    3. iOS-コアデータとサーバーデータベースの同期のベストプラクティス

    4. Ubuntuサーバー17.04php7およびapache2でoci8.soをロード中にエラーが発生しました