Oracle
 sql >> Datenbank >  >> RDS >> Oracle

SQL For Update Skip Locked Query und Java Multi Threading – So beheben Sie das Problem

Ich würde mit so etwas gehen:Ein Cursor, um die Zeilen für die Aktualisierung auszuwählen, und die LIMIT-Klausel verwenden, um die ersten zehn verfügbaren zu erhalten.

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;

Eigentlich würde ich zuerst sehen, ob die Verarbeitung ALLER ausstehenden Zeilen als Satz besser wäre als Multi-Threading.

Wenn ich mich dann entscheiden sollte, dass ich eine Form von Multi-Threading brauche, würde ich mir Pipeline-Funktionen mit aktiviertem Parallelbetrieb ansehen (vorausgesetzt, ich habe die Enterprise Edition).