Oracle
 sql >> база данни >  >> RDS >> Oracle

Изгледът на Oracle не може да се актуализира, съвет относно тригерите Instead Of

Тригерът INSTEAD OF ще изглежда така (предположих, че имате колона с първичен ключ 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

Имайте предвид, че някои колони всъщност могат да се актуализират в оригиналния изглед. Запитване за all_updatable_columns изглед (преди създаване на тригера), за да разберете:

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;

Изгледът е създаден

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

Ако трябва само да вмъкнете/актуализирате тези колони, нямате нужда от тригер 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. Грешка при изпълнението на извикване на ODCIEXTTABLEOPEN

  2. Как да възстановите данните в таблица на Oracle?

  3. Обща грешка:1008 OCIStmtExecute:ORA-01008:не всички променливи са обвързани

  4. SQL FIFO заявка с групиране по

  5. Присъединете/завъртете елементи с EAV таблица