Kiểm tra câu lệnh MERGE. Điều này sẽ làm những gì bạn muốn - đó là WHEN NOT MATCHED
mệnh đề sẽ thực hiện điều này.
Do Oracle thiếu hỗ trợ mệnh đề VALUES () thực sự, cú pháp cho một bản ghi duy nhất với các giá trị cố định mặc dù khá vụng về:
MERGE INTO your_table yt
USING (
SELECT 42 as the_pk_value,
'some_value' as some_column
FROM dual
) t on (yt.pk = t.the_pke_value)
WHEN NOT MATCHED THEN
INSERT (pk, the_column)
VALUES (t.the_pk_value, t.some_column);
Một cách tiếp cận khác (ví dụ:nếu bạn đang tải hàng loạt từ một bảng khác) là sử dụng phương tiện "Ghi nhật ký lỗi" của Oracle. Câu lệnh sẽ giống như sau:
INSERT INTO your_table (col1, col2, col3)
SELECT c1, c2, c3
FROM staging_table
LOG ERRORS INTO errlog ('some comment') REJECT LIMIT UNLIMITED;
Sau đó, tất cả các hàng có lỗi sẽ có trong bảng errlog
. Bạn cần tạo errlog
đó bảng (hoặc bất kỳ tên nào bạn chọn) theo cách thủ công trước khi chạy chèn bằng DBMS_ERRLOG.CREATE_ERROR_LOG
.
Xem hướng dẫn để biết thêm chi tiết