Sletning af poster i batches kan ske i en PL/SQL-løkke, men anses generelt for dårlig praksis, da hele sletningen normalt skal betragtes som en enkelt transaktion; og det kan ikke gøres fra SQL*Loader-kontrolfilen. Din DBA skal have størrelsen UNDO
plads til at rumme det arbejde, du skal udføre.
Hvis du sletter hele tabellen, vil du næsten helt sikkert være bedre stillet til at afkorte alligevel, enten i kontrolfilen :
options(skip=1,load=250000,errors=0,ROWS=30000,BINDSIZE=10485760)
load data
infile 'G:1.csv' "str '^_^'"
truncate
into table IMPORT_ABC
...
Eller som en separat truncate
sætning i SQL*Plus/SQL-udvikler/en anden klient, før du starter indlæsningen:
truncate table import_abc;
Ulempen er, at din tabel vil fremstå tom for andre brugere, mens de nye rækker indlæses, men hvis det er et dedikeret importområde (gætte ud fra navnet), er det måske alligevel ligegyldigt.
Hvis din UNDO
er virkelig så lille, så skal du muligvis køre flere belastninger, i hvilket tilfælde - sandsynligvis selvfølgelig - du skal sikre dig, at du kun har truncate
i kontrolfilen for den første (eller brug den separate truncate
). erklæring), og lad tilføje
i stedet for i efterfølgende kontrolfiler, som du bemærkede i kommentarer.
Du kan også overveje eksterne tabeller
hvis du bruger disse data som en base til at udfylde noget andet, da der ikke er nogen UNDO
overhead ved udskiftning af den eksterne datakilde. Du bliver sandsynligvis nødt til at tale med din DBA om at konfigurere det og give dig de nødvendige mappetilladelser.