Việc xóa các bản ghi theo lô có thể được thực hiện trong một vòng lặp PL / SQL, nhưng thường được coi là hành vi xấu vì toàn bộ việc xóa thường được coi là một giao dịch duy nhất; và điều đó không thể thực hiện được từ bên trong tệp điều khiển SQL * Loader. DBA của bạn phải có kích thước UNDO
không gian để đáp ứng công việc bạn cần làm.
Nếu bạn đang xóa toàn bộ bảng thì gần như chắc chắn bạn vẫn nên cắt bớt đi trong tệp điều khiển :
Tùy chọnoptions(skip=1,load=250000,errors=0,ROWS=30000,BINDSIZE=10485760)
load data
infile 'G:1.csv' "str '^_^'"
truncate
into table IMPORT_ABC
...
Hoặc dưới dạng truncate
riêng biệt
câu lệnh trong SQL * Plus / SQL Developer / một số ứng dụng khách khác trước khi bạn bắt đầu tải:
truncate table import_abc;
Điều bất lợi là bảng của bạn sẽ xuất hiện trống cho những người dùng khác trong khi các hàng mới đang được tải, nhưng nếu đó là khu vực nhập chuyên dụng (đoán từ tên) thì điều đó có thể không thành vấn đề.
Nếu UNDO
của bạn thực sự nhỏ như vậy thì bạn có thể phải chạy nhiều lần tải, trong trường hợp đó - có thể là rõ ràng - bạn cần đảm bảo rằng bạn chỉ có truncate
trong tệp điều khiển cho tệp đầu tiên (hoặc sử dụng truncate
riêng biệt tuyên bố) và có append
thay vào đó trong các tệp điều khiển tiếp theo như bạn đã lưu ý trong nhận xét.
Bạn cũng có thể muốn xem xét bảng bên ngoài
nếu bạn đang sử dụng dữ liệu này làm cơ sở để điền vào thứ khác, vì không có UNDO
chi phí thay thế nguồn dữ liệu bên ngoài. Có thể bạn sẽ cần nói chuyện với DBA của mình về việc thiết lập điều đó và cấp cho bạn các quyền thư mục cần thiết.