Khi chỉ tìm kiếm cú pháp INSERT của Oracle, tôi nhận thấy bạn có thể chèn vào truy vấn, ví dụ:Chèn vào truy vấn
insert into (select * from dept) (deptno, dname) values (99, 'new department');
Ai có thể làm sáng tỏ điều này có ý nghĩa gì không? Tôi có thể đạt được điều gì khi chèn vào truy vấn mà tôi không thể chèn trực tiếp vào bảng?
UPDATE: Cho đến nay có vẻ như đây chỉ là một cú pháp thay thế, vì vậy tôi có thể viết
insert into (select deptno, dname from dept) values (99, 'new department');
thay vì
insert into dept (deptno, dname) values (99, 'new department');
Cùng một điều, kế hoạch thực hiện tương tự. Nó không quan trọng cho dù truy vấn trả về một bản ghi hay không. Điều này:
insert into (select deptno, dname from dept where 1 = 0) values (99, 'new department');
dẫn một lần nữa đến cùng một kế hoạch thực hiện. Vì vậy, chúng ta có thể giả định rằng nó thực sự không quan trọng những gì subquery trông giống như miễn là chúng tôi chỉ chọn cột từ một bảng. Nhưng không. Đây:
insert into (select deptno, dname from dept cross join some_table)
values (99, 'new department');
dẫn đến "ORA-01.779: không thể sửa đổi một cột mà bản đồ vào một bảng không quan trọng bảo tồn" hay "ORA-01.732: Dữ liệu thao tác hoạt động không hợp pháp trên quan điểm này".
Tôi có ấn tượng rằng Oracle đã quyết định cho phép chèn vào truy vấn, vì chúng cho phép chèn vào chế độ xem, cho câu hỏi con khác ở đây thì xem quảng cáo hoc là gì? Vì vậy, khi bạn có thể chèn vào chế độ xem, chắc chắn chúng cũng cho phép bạn chèn vào chế độ xem quảng cáo, nhưng không ai trong tâm trí của họ sẽ sử dụng cú pháp này, tất nhiên :-)
Nhưng có thể tôi đã sai? Có lẽ cú pháp này cung cấp một cái gì đó mà tôi chưa nhận thức được? Nếu vậy hãy cho tôi biết :-)
Ah, vậy bạn có nói rằng đây chỉ là một cú pháp thay thế? Tôi có thể 'chèn vào các giá trị deptno (deptno, dname) (...)' hoặc 'chèn vào (chọn deptno, dname từ dept) giá trị (...)'. Vì vậy, nó chỉ là một cách khác để viết cùng một điều và không có bất kỳ lợi thế hơn khác? –
Về cơ bản có - mặc dù tôi đã không nghiên cứu phân nhánh có thể. Dựa trên các tài liệu tôi sẽ không mong đợi họ, trừ khi bạn chỉ có 'chèn' đặc quyền và không' chọn' trên bảng tương ứng. – collapsar