sql >> Databasteknik >  >> RDS >> Oracle

SQL för uppdatering Skip Locked Query och Java Multi Threading - Hur man fixar detta

Jag skulle gå med något sånt här:En markör för att välja raderna för uppdatering och använda LIMIT-satsen för att få de första tio tillgängliga.

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;

Egentligen skulle jag först se om det skulle vara bättre att bearbeta ALLA utestående rader som en uppsättning än multi-threading.

Om jag sedan bestämmer mig för att jag behövde någon form av multi-threading, skulle jag titta på pipeline-funktioner med parallell aktiverad (förutsatt att jag var på Enterprise Edition).



  1. När XML-data laddas visas ett felmeddelande som säger att min kontrollfil refererar till ett icke-existerande fält

  2. mysql - UPPDATERING av rad baserat på andra rader

  3. mysql select and where över flera tabeller (mycket knepigt)

  4. Gå med i en kolumn med SELECT-fråga i PostgreSQL