Oracle "Häppchenweises" Update durchführen

turmaline

Bekanntes Mitglied
Hallo!

ich möhte aus einem Java-Programm ein "häppchenweises" Update durchführen. Die SQL-Anfrage sähe ungefähr so aus:

SQL:
UPDATE table SET x = 12 
WHERE y IN 
(   -- The SubSelect identifies all relevant y
    SELECT ...
    FROM ... m JOIN ... p 
         ON ...
    WHERE ...
      AND ROWNUM <= 100
);

ROWNUM wird als parameter übergeben!

Ich hätte zwei Lösungen im Kopf:

1)
- subselect mit COUNT durchführen, somit hätte ich die gesamte Anzahl von den Datensätzen die zu updaten sind;
- in einer Schleife soviel mal das Update durchführen wie es nötig ist (die ergebnisse die schon upgedatet wurden tauchen beim nächsten mal nicht mehr auf)

2)
- Anfrage so oft stellen bis keine Datänsätze mehr upgedatet werden (do while oder so)

Gibt es eine intelligentere Möglichkeit? Bzw. welche Option würdet Ihr bevorzugen?

Ich benutze java.sql

Danke und Gruß,

madlena
 
ach so ja, damit dieses "häppchenweises" update sich lohnt, sollte man die do while schleife aus der Web-Klasse starten und nicht aus der DAO-Klasse, damit jede Anfrage in einer neuen Transaktion ausgeführt wird. Das ist beispielsweise dann wichtig, wenn man sehr viel Datensätze zu updaten hat und eine Transaktion nach einer bestimmten Dauer abgebrochen wird.
 
nicht was ich vorHABE sondern was ich vorHATTE, denn das thema ist schon erledigt und ich habe hier die lösung gepostet. Es geht darum, wenn man ein UPDATE in mehreren Transaktionen durchführen möchte (weil falls man sehr viele Datensätze hat, kann es zu time out kommen). Die zu aktualisierten Datensätze werden im Subselekt-Block ausgewählt und die Teilmenge mit ROWNUM beschränkt. Beim der nächsten Ausführung werden sie nicht mehr für das Update ausgewählt. Damit ich mehrere Transaktionen starten kann, verwende ich do while schleife in der Web-Klasse.

Ich denke, diejenigen die das Problem haben, werden schon verstehen worum es geht.
 

Neue Themen


Zurück
Oben