Zitat Zitat von harkne Beitrag anzeigen
Naja, ich versuche einfach eine bestimmte Anzahl Sätze von einer Datei in eine andere Datei zu schreiben und die Sätze dann in der Ursprungsdatei zu löschen. (Archivieren).
@Bender
nicht bedingter rollback. --> Was ist ein nicht bedingter Rollback? Ich verschiebe Sätze von Datei A nach Datei B und im Anschluß mache ich einen COMMIT. Falls ein Fehler auftritt einen ROLLBACK. Was soll ich da bedingen?
- einen Satz löschen macht man nicht mit execute immediate --> Warum? Was ist der Unterschied. Wie gesagt ich lösche mehrere Sätze und schreibe mehrere Sätze
- SQL und ACTGRP * new unter commit ist selten eine gute Idee. -> warum? Das Startprogramm macht *new und in diesem Fall ist es nur das eine Programm und die folgenden *caller. Wo gibt es Probleme damit bei commit?
bestenfalls die zweitbeste Idee --> Ich bin für die beste Idee offen :-)
... in deinem snippet war nicht erkennbar, dass du den rollback versuchst, wenn es nicht geklappt hat.
- execute iimmediate prüft erst zur runtime, insert, delete etc. rpüft bereits zur compiletime und bietet im Fehlerfall mehr Information.
- ENDJOB schickt beim Jobende ein Rollback hinterher, der alle offenen Transaktionen abräumt. ENDACTGRP schickt im default ein COMMIT hinterher, der offene Transaktionen festschreibt (auch bei IBM gibt es Dilletanten).
Gute Lösungen sind immer nebenwirkungsfrei. Das fängt damit an, dass das schreiben in eine andere Datei in der Herkunftsdatei nichts sperrt und damit der folgende delete andere Sätze löschen könnte, als vorher archiviert wurden.

D*B