A VB 6 Programm Datensätze verarbeitet und in einer temporären Tabelle eingefügt, dann werden diese Datensätze aus dieser temporären Tabelle alsOracle parallele Abfrage zurückkehrt, bevor die eigentlichen Job beendet
zu tatsächlichem Tisch bewegenconnection.Execute "INSERT INTO MAIN_TABLE SELECT * FROM TEMP_TABLE"
Die temporäre Tabelle wird dann abgeschnitten, wenn Datensätze verschoben werden
connection.Execute "TRUNCATE TABLE TEMP_TABLE"
Das funktioniert gut, bis ich PARALLEL-Hinweis für INSERT-Abfrage verwenden. Ich erhalte diesen Fehler auf TRUNCATE
ORA-00054: resource busy und erwerben mit NOWAIT angegeben oder Timeout abgelaufen
Es sieht für mich, dass parallele Abfrage zurückgibt, bevor der Auftrag abgeschlossen und TRUNCATE-Befehl ausgegeben wird verursacht die Sperre.
überprüfte ich die Anzahl der Datensätze, wie unten eingefügt und festgestellt, dass es weit weniger als die Anzahl der Datensätze in temporärer Tabelle
connection.Execute "INSERT /*+ PARALLEL */ INTO MAIN_TABLE SELECT * FROM TEMP_TABLE", recordsAffected
Gibt es eine Möglichkeit zu warten, INSERT abgeschlossen ist?
Was ist Ihre Verbindungszeichenfolge? Können Sie ein längeres Zeitlimit angeben? – dbmitch
Tun Sie ein 'Delete' anstelle von' Truncate'. Aber wenn dies nur eine temporäre Tabelle ist, warum müssen Sie überhaupt löschen? 'ON COMMIT {DELETE | PRESERVE} ROWS 'löscht die Tabelle nach jedem Commit | Session. – topshot
@dbmitch Es geht nicht um TIMEOUT, aber connection.Execute gibt zurück, was bewirkt, dass die nächste Abfrage ausgeführt wird, während die erste noch bearbeitet wird – bjan