A5:SQL Mk-2

開発のこと、日々のこと

エラーが起きたトランザクションでrollbackができない

ホーム フォーラム A5:SQL Mk-2掲示板 エラーが起きたトランザクションでrollbackができない

  • このトピックには1件の返信、1人の参加者があり、最後に松原正和により3週、 3日前に更新されました。
2件の投稿を表示中 - 1 - 2件目 (全2件中)
  • 投稿者
    投稿
  • #31951 返信
    よね
    ゲスト

    いま教育のためにA5M2でSQLを実行した時の挙動を確認しています。
    トランザクション内でエラーが起きた場合について教えるために下記のようなSQLを上から順に流そうとしました。

    begin;
    insert into XXXXXX values(null,10000,29999);

    そうしたら2個目でテーブルが存在しないエラーになりました。これは想定通りです。
    その後エラーが起きたから今のトランザクションを終わるために「rollback;」を実施しようとしました。
    実施したところ「current transaction is aborted, commands ignored until end of transaction block」と出てしまいrollback自体が通りません。

    試しにbegin、正常なselect文、commitなどを実行して挙動を確かめましたが同じように「current transaction is aborted, commands ignored until end of transaction block」となってしま
    いました。

    トランザクションの練習なので手動でトランザクションを開始して手動でrollbackなりcommitなりでトランザクションを終わらせたいというのが主眼なのですが、エラー時には手動ロールバックは行えないクライアントソフトという認識でよいでしょうか?
    それともrollbackはできるはずなのに何かしらの要因でできなくなってしまっているのでしょうか?

    #32727 返信
    松原正和
    キーマスター

    よねさんこんにちは。お返事が遅くなり申し訳ありません。
     
    A5:SQL Mk-2 ではトランザクションはコマンドではなく、メニューやスピードボタンから行います。
    また、デフォルトでは即時コミットとなっており、INSERT, UPDATE, DELETE の操作は即時コミットされロールバックできません。
     
    手動でトランザクションを開始するか、オプション設定で「データベース接続」タブで、「データベースの更新時に自動的にトランザクションを開始する」をチェックします。
     
    デフォルトが即時コミットになっているのは、トランザクションが長くなることでデータを長時間ロックすることなどによるトラブルを防止するためです。(本来トランザクションはできるだけ速やかにコミットまたはロールバックすべきものです)
     
    ご了承ください。

2件の投稿を表示中 - 1 - 2件目 (全2件中)
返信先: エラーが起きたトランザクションでrollbackができないで#32727に返信
あなたの情報:




コメントは受け付けていません。