Att radera poster i partier kan göras i en PL/SQL-loop, men anses allmänt vara dålig praxis eftersom hela raderingen normalt ska betraktas som en enda transaktion; och det kan inte göras från SQL*Loader-kontrollfilen. Din DBA bör storleken UNDO
utrymme för att rymma det arbete du behöver göra.
Om du tar bort hela tabellen är det nästan säkert bättre att trunkera ändå, antingen i kontrollfilen :
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
uttalande i SQL*Plus/SQL-utvecklare/någon annan klient innan du startar laddningen:
truncate table import_abc;
Nackdelen är att din tabell kommer att visas tom för andra användare medan de nya raderna laddas, men om det är ett dedikerat importområde (gissning från namnet) kanske det inte spelar någon roll ändå.
Om din ÅNGRA
är verkligen så liten så kan du behöva köra flera laddningar, i vilket fall - förmodligen uppenbarligen - måste du se till att du bara har truncate
i kontrollfilen för den första (eller använd den separata truncate
uttalande), och ha lägga till
istället i efterföljande kontrollfiler som du noterade i kommentarerna.
Du kanske också vill överväga externa tabeller
om du använder denna data som bas för att fylla i något annat, eftersom det inte finns någon ÅNGA
overhead vid byte av den externa datakällan. Du måste förmodligen prata med din DBA om att ställa in det och ge dig de nödvändiga katalogbehörigheterna.