Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Trong Oracle, có thể CHÈN hoặc CẬP NHẬT một bản ghi thông qua một khung nhìn không?

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.

Từ tham chiếu SQL 10g Oracle:

Ghi chú về Chế độ xem có thể cập nhật

Dạng xem có thể cập nhật là dạng bạn có thể sử dụng để chèn, cập nhật hoặc xóa các hàng của bảng cơ sở. Bạn có thể tạo một dạng xem để có thể cập nhật được hoặc bạn có thể tạo một trình kích hoạt INSTEAD OF trên bất kỳ dạng xem nào để làm cho nó có thể cập nhật được.

Để tìm hiểu xem có thể sửa đổi các cột của chế độ xem vốn có thể cập nhật theo cách nào 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 vốn có thể cập nhật được. Để một chế độ xem vốn có thể cập nhật, các điều kiện sau phải được đáp ứng:

  • Mỗi cột trong chế độ xem phải ánh xạ tới một cột của một bảng. Ví dụ:nếu một cột chế độ xem ánh xạ tới đầu ra của mệnh đề TABLE (một bộ sưu tập chưa được xếp hạng), thì chế độ xem này vốn dĩ không thể cập nhật được.
  • Dạng xem không được chứa bất kỳ cấu trúc nào sau đây:
    • Một toán tử tập hợp
    • một toán tử DISTINCT
    • Một hàm tổng hợp hoặc phân tích
    • Mệnh đề GROUP BY, ORDER BY, MODEL, CONNECT BY hoặc START WITH
    • Một biểu thức tập hợp trong danh sách CHỌN
    • Một truy vấn con trong danh sách CHỌN
    • Một truy vấn con được chỉ định CHỈ CÓ ĐỌC
    • Tham gia, với một số ngoại lệ, như được ghi trong Hướng dẫn của Quản trị viên Cơ sở dữ liệu Oracle

Ngoài ra, nếu một dạng xem vốn có thể cập nhật có chứa các cột giả hoặc biểu thức, thì bạn không thể cập nhật các hàng của bảng cơ sở bằng câu lệnh UPDATE đề cập đến bất kỳ cột giả hoặc biểu thức nào trong số này.

Nếu bạn muốn một chế độ xem kết hợp có thể cập nhật được, thì tất cả các điều kiện sau phải đúng:

  • Câu lệnh DML chỉ được ảnh hưởng đến một bảng bên dưới phép nối.
  • Đối với câu lệnh INSERT, không được tạo dạng xem VỚI LỰA CHỌN KIỂM TRA 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 bảo toàn bằng khóa. Bảng được bảo toàn bằng 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 kết hợp.
  • Đối với một câu lệnh CẬP NHẬT, 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 lưu giữ khóa. Nếu chế độ xem được tạo VỚI LỰA CHỌN KIỂM TRA, thì các cột nối và các cột được lấy từ các bảng được tham chiếu nhiều lần trong chế độ xem phải được che chắn khỏi CẬP NHẬT.
  • Đối với câu lệnh DELETE, nếu phép kết hợp dẫn đến nhiều hơn một bảng được bảo toàn 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ó được tạo VỚI CHỌN KIỂM TRA hay không.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chèn hàng loạt vào cơ sở dữ liệu Oracle:Cái nào tốt hơn:Vòng lặp FOR Cursor hay một lựa chọn đơn giản?

  2. Điều gì có thể khiến ROWID của Oracle thay đổi?

  3. View trong Oracle là gì?

  4. Điều chỉnh hiệu suất PL / SQL cho các truy vấn ký tự đại diện LIKE '% ...%'

  5. Tạo tổng tích lũy trong chế độ xem oracle