Trong Oracle, có thể INSERT hoặc UPDATE một bản ghi (một hàng) thông qua một khung nhìn không?Trong Oracle, có thể INSERT hoặc UPDATE một bản ghi thông qua một khung nhìn không?
Trả lời
Chế độ xem trong Oracle có thể có thể cập nhật trong các điều kiện cụ thể. Nó có thể phức tạp, và thường là không được khuyến khích.
Ghi chú về Updatable Lần
An xem có thể cập nhật là một trong những bạn có thể sử dụng để chèn, cập nhật hoặc xóa các hàng bảng cơ sở. Bạn có thể tạo chế độ xem để có thể cập nhật vốn có hoặc bạn có thể tạo trình kích hoạt INSTEAD OF trên bất kỳ chế độ xem nào để làm cho nó có thể cập nhật.
Để tìm hiểu xem các cột của chế độ xem có thể cập nhật vốn có thể được sửa đổi hay không, hãy truy vấn chế độ xem từ điển dữ liệu USER_UPDATABLE_COLUMNS. Thông tin được hiển thị bởi chế độ xem này chỉ có ý nghĩa đối với các chế độ xem có thể cập nhật vốn có. Đối với chế độ xem có thể cập nhật vốn có, phải đáp ứng các điều kiện sau:
- Mỗi cột trong chế độ xem phải ánh xạ tới cột của một bảng. Ví dụ, nếu một cột xem ánh xạ tới đầu ra của một mệnh đề TABLE (một bộ sưu tập không cần thiết), thì khung nhìn không thể cập nhật được.
- Quan điểm không được chứa bất kỳ của các cấu trúc sau:
- Một nhà điều hành bộ
- một nhà điều hành DISTINCT
- Một tổng hợp hoặc chức năng phân tích
- Một GROUP BY, ORDER BY, MODEL, CONNECT BY hoặc START WITH khoản
- Biểu thức thu thập trong danh sách SELECT
- Truy vấn con trong danh sách SELECT
- Một subquery định với Read Only
- tham gia, với một số trường hợp ngoại lệ, như tài liệu trong Hướng dẫn Oracle Database Administrator của
Bên cạnh đó, nếu một cái nhìn vốn đã có thể cập nhật chứa pseudocolumns hoặc biểu thức, thì bạn không thể cập nhật cơ sở các hàng trong bảng có câu lệnh UPDATE đề cập đến bất kỳ các pseudocolumn hoặc biểu thức nào.
Nếu bạn muốn có một cái nhìn tham gia để có thể cập nhật, sau đó tất cả các điều kiện sau đây phải đúng:
- Tuyên bố DML phải chỉ ảnh hưởng đến một bảng cơ sở để tham gia.
- Đối với câu lệnh INSERT, khung nhìn không được tạo VỚI CHECK OPTION, và tất cả các cột mà các giá trị được chèn vào phải đến từ một bảng được giữ nguyên khóa. Bảng được giữ nguyên khóa là bảng mà mỗi khóa chính hoặc giá trị khóa duy nhất trong bảng cơ sở cũng là duy nhất trong chế độ xem nối.
- Đối với câu lệnh UPDATE, tất cả các cột được cập nhật phải được trích xuất từ một bảng được giữ nguyên khóa. Nếu khung nhìn được tạo ra với CHECK OPTION, thì hãy nối các cột và các cột được lấy từ các bảng được tham chiếu nhiều hơn một lần trong khung nhìn phải được che chắn từ CẬP NHẬT. Đối với câu lệnh DELETE, nếu kết quả tham gia vào nhiều hơn một bảng được duy trì khóa, thì Cơ sở dữ liệu Oracle sẽ xóa khỏi bảng đầu tiên có tên trong mệnh đề FROM, cho dù chế độ xem đã được tạo CÓ CHECK OPTION hay chưa.
Có hai lần khi bạn có thể cập nhật một kỷ lục qua một cái nhìn:
- Nếu xem không có người tham gia hoặc cuộc gọi thủ tục và chọn dữ liệu từ một bảng cơ bản duy nhất.
- Nếu chế độ xem có INSTEAD OF INSERT trigger được liên kết với chế độ xem.
Nói chung, bạn không nên dựa vào việc có thể thực hiện chèn vào chế độ xem trừ khi bạn đã ghi cụ thể trình kích hoạt INSTEAD OF cho nó. Xin lưu ý, cũng có các trình kích hoạt INSTEAD OF UPDATE có thể được viết cũng như để giúp thực hiện các cập nhật.
Chủ yếu là đúng, nhưng có thể cập nhật chế độ xem tham gia trong một số trường hợp. – DCookie
Oracle có hai cách khác nhau để làm cho quan điểm có thể cập nhật: -
- Quan điểm là "chìa khóa duy trì" sự tôn trọng với những gì bạn đang cố gắng để cập nhật với. Điều này có nghĩa là khóa chính của bảng bên dưới nằm trong khung nhìn và hàng xuất hiện chỉ một lần trong khung nhìn. Điều này có nghĩa là Oracle có thể xác định chính xác hàng của bảng cơ bản nào để cập nhật OR
- Bạn viết thay vì kích hoạt.
Tôi sẽ tránh xa các trình kích hoạt thay thế và yêu cầu mã của bạn cập nhật trực tiếp các bảng bên dưới thay vì thông qua chế độ xem.
YES, bạn có thể cập nhật và Chèn vào xem và chỉnh sửa sẽ phản ánh trên bảng gốc ....
NHƯNG
1 quan điểm nên có tất cả các KHÔNG NULL giá trị trên bàn
2-cập nhật phải có các quy tắc giống như bảng ... "cập nhật khóa chính liên quan đến khóa ngoài khác .. v.v ..."
- 1. Tôi có thể sử dụng luồng để INSERT hoặc UPDATE một hàng trong SQL Server (C#) không?
- 2. Oracle MERGE không INSERT
- 3. Có một rollback bên trong một INSERT SAU hoặc UPDATE SAU KHI kích hoạt rollback toàn bộ giao dịch
- 4. Một khung nhìn SQL có luôn ở trong 1NF không?
- 5. "INSERT IGNORE" so với "INSERT ... ON UPDATE DUPLICATE KEY"
- 6. Trong SQL, UPDATE có luôn nhanh hơn DELETE + INSERT không?
- 7. Tìm hoặc tạo bản ghi thông qua liên kết factory_girl
- 8. Oracle Update Hangs
- 9. Làm thế nào để xác định xem một cột của một khung nhìn có xuất phát hay không?
- 10. Tiêm một khung nhìn có kích thước khác trong một khung nhìn khác khiến cho nó được tái tạo
- 11. CodeIgniter: INSERT nhiều bản ghi không có chu kỳ
- 12. Có cách nào để thêm một cột vào một khung nhìn hiện có trong mysql không?
- 13. Oracle Chèn qua Chọn từ nhiều bảng trong đó một bảng có thể không có hàng
- 14. Làm thế nào để chọn không hoặc một bản ghi từ một bảng dummy trong Ingres
- 15. Cách trả về bản ghi từ một bảng hiện có từ một hàm Oracle PL/SQL?
- 16. Tôi có thể sao chép: OLD và: bản ghi giả mới trong/vào một thủ tục được lưu trữ của Oracle không?
- 17. Một INSERT với UNIONS hoặc nhiều INSERTS?
- 18. Chọn bản ghi cho một năm nhất định Oracle
- 19. Wrapping GridView văn bản mà không có một không gian có thể nhìn thấy
- 20. Oracle: Làm thế nào tôi có thể chọn bản ghi CHỈ từ ngày hôm qua?
- 21. Devise Registration # update thông qua JS trong Rails
- 22. Chuyển đổi lệnh INSERT thành UPDATE
- 23. pandas python cách đếm số lượng bản ghi hoặc hàng trong một khung dữ liệu
- 24. chìa khóa ngoại tham khảo một cái nhìn trong Oracle
- 25. Bạn có thể cho biết một mảng có phải là khung nhìn của một mảng khác không?
- 26. Trình kích hoạt cho INSERT và UPDATE trên cùng một bảng
- 27. Đầu ra JSON của một khung nhìn trong Grails
- 28. Tại sao 2 hàng bị ảnh hưởng trong `INSERT ... ON UPDATE DUPLICATE KEY UPDATE`?
- 29. Bản đồ không thể SYS_REFCURSOR trong khung thực thể
- 30. Mô hình khung nhìn cơ bản MVVM
Tôi có nghĩa là hồ sơ. Tôi đã chỉnh sửa câu hỏi. –