Oracle
 sql >> Baza danych >  >> RDS >> Oracle

SQL do aktualizacji Pomiń zablokowane zapytanie i wielowątkowość Java — jak to naprawić

Wybrałbym coś takiego:kursor do wybierania wierszy w celu aktualizacji i użycie klauzuli LIMIT, aby uzyskać pierwszych dziesięć dostępnych.

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;

Właściwie najpierw sprawdziłbym, czy przetwarzanie WSZYSTKICH zaległych wierszy jako zestawu byłoby lepsze niż wielowątkowość.

Następnie, gdybym zdecydował, że potrzebuję jakiejś formy wielowątkowości, spojrzałbym na funkcje potokowe z włączonym równoległym (zakładając, że jestem w wersji Enterprise).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Proszę o pomoc z SQLPLUS? Jak na początku uruchomić SQLPLUS z DEFINE `OFF`?

  2. Używanie nazw usług Oracle z SQLAlchemy

  3. Przekazywanie tablicy z aplikacji .Net do procedury składowanej Oracle

  4. Klauzula Oracle WITH nie zwraca żadnych danych

  5. Tworzenie tabeli bazy danych w SQL, dziwny błąd