Oracle
 sql >> Base de données >  >> RDS >> Oracle

SQL pour la mise à jour Skip Locked Query et Java Multi Threading - Comment résoudre ce problème

J'irais avec quelque chose comme ça :un curseur pour sélectionner les lignes dans l'ordre de mise à jour, et utiliser la clause LIMIT pour obtenir les dix premières disponibles.

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;

En fait, je verrais d'abord si le traitement de TOUTES les lignes en suspens comme un ensemble serait mieux que le multi-threading.

Ensuite, si je décidais que j'avais besoin d'une forme de multi-threading, j'examinerais les fonctions en pipeline avec le parallèle activé (en supposant que j'étais sur Enterprise Edition).