sql >> Base de Datos >  >> RDS >> Oracle

SQL para actualización Saltar consulta bloqueada y subprocesos múltiples de Java:cómo solucionar esto

Iría con algo como esto:un cursor para seleccionar las filas en orden de actualización, y usaría la cláusula LIMIT para obtener los primeros diez 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 realidad, primero vería si procesar TODAS las filas pendientes como un conjunto sería mejor que subprocesos múltiples.

Luego, si decidiera que necesitaba algún tipo de subprocesos múltiples, buscaría funciones canalizadas con paralelo habilitado (suponiendo que estuviera en Enterprise Edition).