sql >> Databáze >  >> RDS >> Oracle

Pohled Oracle nelze aktualizovat, rada ohledně spouštěčů namísto

Spouštěč NAMÍSTO OF by vypadal takto (předpokládal jsem, že máte sloupec primárního klíče 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

Všimněte si, že některé sloupce mohou být ve skutečnosti aktualizovatelné v původním zobrazení. Dotaz na all_updatable_columns zobrazit (před vytvořením spouštěče), abyste zjistili:

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;

Pohled vytvořen

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

Pokud potřebujete pouze vložit/aktualizovat tyto sloupce, nepotřebujete MÍSTO spouštěče.



  1. Vygenerujte rozsah dat pomocí SQL

  2. PostgreSQL User Group NL

  3. PHP Třídění nejbližších souřadnic

  4. Sečtěte po měsíci a uveďte měsíce do sloupců