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

Chế độ xem Oracle không thể cập nhật, lời khuyên về thay vì kích hoạt

Trình kích hoạt INSTEAD OF sẽ trông như thế này (Tôi đã giả định rằng bạn có cột khóa chính id ):

SQL> CREATE OR REPLACE TRIGGER trg_staff_data_cpt_instead_upd
  2     INSTEAD OF UPDATE ON staff_data_compat
  3     FOR EACH ROW
  4  BEGIN
  5     UPDATE staff_data_compat_t
  6        SET knownas_surname = :new.surname,
  7            first_name = :new.first_name,
  8            middle_name = :new.mid_name
  9      WHERE id = :new.id
 10  END;
 11  /

Trigger created

Lưu ý rằng trên thực tế, một số cột có thể được cập nhật trong chế độ xem ban đầu. Truy vấn all_updatable_columns xem (trước khi tạo trình kích hoạt) để tìm hiểu:

SQL> CREATE TABLE staff_data_compat_t AS
  2  SELECT object_name knownas_surname,
  3         owner surname,
  4         object_type first_name,
  5         subobject_name middle_name
  6    FROM all_objects;

Table created

SQL> CREATE OR REPLACE VIEW staff_data_compat AS
  2  SELECT
  3    NVL(knownas_surname,surname) as surname,
  4    first_name,
  5    middle_name mid_name,
  6    NULL as ni,
  7    NULL as home_tel_no
  8  FROM staff_data_compat_t;

Xem đã tạo

SQL> SELECT * FROM all_updatable_columns WHERE table_name = 'STAFF_DATA_COMPAT';

OWNER  TABLE_NAME         COLUMN_NAME  UPDATABLE INSERTABLE DELETABLE
------ ------------------ ------------ --------- ---------- ---------
VNZ    STAFF_DATA_COMPAT  SURNAME      NO        NO         NO
VNZ    STAFF_DATA_COMPAT  FIRST_NAME   YES       YES        YES
VNZ    STAFF_DATA_COMPAT  MID_NAME     YES       YES        YES
VNZ    STAFF_DATA_COMPAT  NI           NO        NO         NO
VNZ    STAFF_DATA_COMPAT  HOME_TEL_NO  NO        NO         NO

Nếu bạn chỉ cần chèn / cập nhật các cột này, bạn không cần trình kích hoạt INSTEAD OF.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle - Tại sao tôi nên sử dụng các gói thay vì các thủ tục hoặc hàm độc lập

  2. Sql - Hợp nhất các hàng nếu ngày kết nối

  3. Nhận giá trị giữa dấu phẩy thứ 2 và thứ 3

  4. Lỗi nhà phát triển SQL với việc vô hiệu hóa các mô-đun và tiếp tục

  5. Làm cách nào tôi có thể kiểm tra null và không null cùng một lúc trong sql?