L'eliminazione di record in batch può essere eseguita in un ciclo PL/SQL, ma è generalmente considerata una cattiva pratica poiché l'intera eliminazione dovrebbe normalmente essere considerata come una singola transazione; e ciò non può essere eseguito dall'interno del file di controllo SQL*Loader. Il tuo DBA dovrebbe dimensionare UNDO
spazio per ospitare il lavoro che devi fare.
Se stai eliminando l'intera tabella, sarà quasi sicuramente meglio troncare comunque, o nel file di controllo :
options(skip=1,load=250000,errors=0,ROWS=30000,BINDSIZE=10485760)
load data
infile 'G:1.csv' "str '^_^'"
truncate
into table IMPORT_ABC
...
O come truncate
istruzione in SQL*Plus/SQL Developer/alcuni altri client prima di avviare il caricamento:
truncate table import_abc;
Lo svantaggio è che la tua tabella apparirà vuota agli altri utenti durante il caricamento delle nuove righe, ma se si tratta di un'area di importazione dedicata (indovinando dal nome) potrebbe comunque non avere importanza.
Se il tuo UNDO
è davvero così piccolo, quindi potresti dover eseguire più carichi, nel qual caso - probabilmente ovviamente - devi assicurarti di avere solo il truncate
nel file di controllo per il primo (o usa il separato truncate
dichiarazione) e hanno append
invece nei file di controllo successivi come hai notato nei commenti.
Potresti anche prendere in considerazione tabelle esterne
se stai usando questi dati come base per popolare qualcos'altro, poiché non c'è UNDO
sovraccarico sulla sostituzione dell'origine dati esterna. Probabilmente dovrai parlare con il tuo DBA per configurarlo e fornirti le autorizzazioni di directory necessarie.