Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle दृश्य अद्यतन करने योग्य नहीं है, इसके बजाय ट्रिगर्स पर सलाह

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

यदि आपको केवल इन स्तंभों को सम्मिलित/अपडेट करने की आवश्यकता है, तो आपको ट्रिगर के बजाय एक की आवश्यकता नहीं है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ACOS () Oracle में फंक्शन

  2. Oracle RAC N+1 अतिरेक

  3. अल्पाइन लाइनक्स पर Oracle

  4. ORA-28000 को कैसे हल करें खाता लॉक है

  5. SQLException:प्रोटोकॉल उल्लंघन। Oracle JDBC ड्राइवर समस्या