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

Oracle ट्रिगर के अंदर नई पंक्ति को XML में बदलें

ट्रिगर्स में होने वाले नुकसानों में से है::new / :old बहुत विशिष्ट ट्रिगर हैं और संभालने के लिए कठिन हैं। समाधान का एक तरीका स्पष्ट रूप से xmltype का निर्माण करना होगा:

create or replace TRIGGER EVAL_CHANGE_TRIGGER
  AFTER INSERT OR UPDATE OR DELETE
  REFERENCING NEW AS NEW OLD AS OLD
  ON ResearchTable
DECLARE
  log_action  varchar(10);
  p_xmldata     XMLtype;
  p_newrowdata    clob;
BEGIN
    select XMLElement("ResearchTable", 
                   XMLElement("myColumn1", :NEW.myColumn1),
                   XMLElement("myColumn2", :NEW.myColumn2),
                   ....)
                   into p_xmldata from dual;
                   
   p_newrowdata:=p_xmldata.getClobVal();  
  
  IF INSERTING THEN
    log_action := 'Insert';
  ELSIF UPDATING THEN
    log_action := 'Update';
  ELSIF DELETING THEN
    log_action := 'Delete';
  ELSE
    DBMS_OUTPUT.PUT_LINE('This code is not reachable.');
  END IF;

 INSERT INTO auditsResearch (table_name, transaction_name, by_user, transaction_date,XMLDATA)
   VALUES('PROJ_TEST', log_action, USER, SYSDATE,p_newrowdata);
END;

एक्सएमएल-पीढ़ी बहुत टेबल-विशिष्ट है (नई-सीमाओं के कारण), मैं लक्ष्य तालिका के मेटा-डेटा को क्वेरी करके कुछ कोड-जनरेशन का उपयोग करूंगा:

select 'XMLElement("'||cols.column_Name||'", :NEW.'||cols.column_name||'),'
 from SYS.ALL_TAB_COLS cols
where upper(cols.owner)=upper('MY_TARGET_SCHEMA')
and upper(cols.table_name)=upper('MY_TABLE')
order by column_id
;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. त्रुटि:ORA-65096:oracle में अमान्य सामान्य उपयोगकर्ता या भूमिका का नाम

  2. एक्सेल वर्कशीट में Oracle टेबल एक्सपोर्ट करना

  3. Oracle:'=कोई ()' बनाम 'IN ()'

  4. एओएल/जे सेटअप टेस्ट सूट

  5. Oracle पैकेज अमान्य होने के लिए किन स्थितियों का कारण बनता है?