Trong discussion về nhiều hàng chèn vào Oracle hai phương pháp đã được chứng minh:Chèn nhiều hàng vào Oracle
Đầu tiên:
insert into pager (PAG_ID,PAG_PARENT,PAG_NAME,PAG_ACTIVE)
select 8000,0,'Multi 8000',1 from dual
union all select 8001,0,'Multi 8001',1 from dual
Thứ hai:
INSERT ALL
INTO t (col1, col2, col3) VALUES ('val1_1', 'val1_2', 'val1_3')
INTO t (col1, col2, col3) VALUES ('val2_1', 'val2_2', 'val2_3')
INTO t (col1, col2, col3) VALUES ('val3_1', 'val3_2', 'val3_3')
.
.
.
SELECT 1 FROM DUAL;
bất cứ ai có thể tranh luận sở thích sử dụng cái khác?
P.S. Tôi không tự mình nghiên cứu (ngay cả kế hoạch giải thích), vì vậy bất kỳ thông tin hoặc ý kiến nào cũng sẽ được đánh giá cao.
Cảm ơn.
Đồng ý với kết luận, nhưng: Nitpick: các câu lệnh INSERT này không trả về bất kỳ giá trị nào, vì vậy sẽ không có nghĩa gì khi nói "trước khi chèn có thể xảy ra" hoặc "từng dòng". Dù sao, anh ấy sử dụng UNION ALL nên không có vấn đề gì với các loại, nếu đó là những gì bạn đang nghĩ đến. –
Một "kế hoạch giải thích" nhanh chóng cho thấy rằng INSERT ALL với 4 dòng int SCOTT.EMP có chi phí 2 (1 chèn nhiều bảng với chi phí CPU duy nhất trong lựa chọn kép) trong khi biến thể UNION ALL có chi phí của 8 (với mỗi SELECT gây ra 2). Nó không phân loại nhưng kết hợp các kết quả và các lựa chọn đơn (ít nhất là NHANH CHÓNG) đang gây ra chi phí. – Kosi2801