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

更新に使用する一括収集

    問題は、コミット全体でフェッチを実行しようとしていることです。

    My_Data_Curを開いたとき for update 句では、OracleはMy_Data_1のすべての行をロックする必要があります 行を返す前のテーブル。 commitするとき 、Oracleはこれらすべてのロックを解放する必要があります(Oracleが作成するロックはトランザクションにまたがりません)。カーソルに要求したロックがなくなったため、for updateを満たすことができなくなったため、Oracleはカーソルを閉じる必要があります。 句。したがって、2番目のフェッチは0行を返す必要があります。

    最も論理的なアプローチは、ほとんどの場合、commitを削除することです。 1回のトランザクションですべてを実行します。本当に、本当に、本当に別々のトランザクションが必要な場合は、ループを繰り返すたびにカーソルを開いたり閉じたりする必要があります。ほとんどの場合、カーソルが開かれるたびに100行のみを返すように制限する何かをしたいと思うでしょう(つまり、rownum <= 100 条項)ロックを配置するためにすべての行にアクセスし、ループを通過するたびにロックを解放するために処理および削除した100以外のすべての行にアクセスする費用が発生しないようにします。



    1. WindowsServer2019にXAMPPソフトウェアをインストールして構成する

    2. 更新v/s共有モードでのロックの場合:同時スレッドがロックされた行の更新された状態値を読み取れるようにします

    3. MySQLテーブルの主キーを公開する必要がありますか?

    4. mysql innodbバッファプールをクリア/フラッシュする方法は?