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

SQLForUpdateはロックされたクエリとJavaマルチスレッドをスキップします-これを修正する方法

    次のようなものを使用します。カーソルを使用して更新する行を選択し、LIMIT句を使用して最初の10個を使用可能にします。

    create table gm_temp
    as select rownum id, table_name obj_name, date '2011-01-01' + rownum create_date 
    from all_tables where rownum < 500;
    
    CREATE TYPE tab_number IS TABLE OF NUMBER;
    
    DECLARE
      cursor c_table IS 
        SELECT id FROM gm_temp ORDER BY create_date DESC FOR UPDATE OF id SKIP LOCKED;
      t_table_src tab_number := tab_number();
    BEGIN
      OPEN c_table;
      FETCH c_table BULK COLLECT INTO t_table_src LIMIT 10;
      CLOSE c_table;
      dbms_output.put_line(':'||t_table_src.count||':'||t_table_src(1));
    END;
    

    実際、最初に、すべての未処理の行をセットとして処理する方がマルチスレッドよりも優れているかどうかを確認します。

    次に、何らかの形式のマルチスレッドが必要であると判断した場合は、並列が有効になっているパイプライン関数を調べます(Enterprise Editionを使用していると仮定)。



    1. SQL ServerReportingServicesでのSalesforce.comデータの操作

    2. 同時に異なるデータベースへのLaravel動的接続

    3. SQLServerクエリストア

    4. Postgresqlの日付形式