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

ऑरैकल में मर्ज स्टेटमेंट के साथ ट्रिगर

आपको अपना स्रोत डेटा मिला है जो आपके मर्ज स्टेटमेंट में मिला हुआ है, मुझे संदेह है। आप केवल पंक्तियों को सम्मिलित करने पर विचार करना चाहते हैं, है ना?

मुझे लगता है कि आपका ट्रिगर कुछ इस तरह होना चाहिए:

CREATE OR REPLACE TRIGGER test_tri
   after INSERT
   ON test1
   FOR EACH ROW WHEN (NEW.col5 >= '01-MAY-16')
   DECLARE
   PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
   IF INSERTING
   THEN
        MERGE INTO test_hist hist
        USING (select :new.package_id, :new.col1, :new.col2, :new.col3, :new.col4, :new.col5
               from   dual) t1
          ON (t1.PACKAGE_ID=hist.PACKAGE_ID)
        WHEN MATCHED THEN
          UPDATE SET hist.col5=t1.col5
        WHEN NOT MATCHED THEN
          INSERT (col1, col2, col3, col4, col5)
          VALUES (t1.col1, t1.col2, t1.col3, t1.col4, t1.col5);
   END IF;  
   COMMIT;
END;
/

एन.बी. अगर :new.col5 एक तिथि कॉलम है, तो बदलें:

FOR EACH ROW WHEN (NEW.col5 >= '01-MAY-16')

करने के लिए

FOR EACH ROW WHEN (NEW.col5 >= to_date('01/05/2016', 'dd/mm/yyyy'))

वर्षों में 4 अंक होते हैं (मैंने अनुमान लगाया है कि आपका मतलब 2016 था, न कि 1916!)।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ऑरैकल टाइमस्टैम्प में दूसरा कैसे जोड़ें

  2. Oracle SQL क्वेरी - पिछले सप्ताह (सोमवार-शनिवार) से डेटा प्राप्त करें

  3. ऑरैकल संग्रहीत कार्यविधि में निर्देशिका से फ़ाइलों को हटाना

  4. पूर्ण पूर्ण MySQL डेटाबेस प्रतिकृति? विचार? लोग क्या करते है?

  5. Oracle SQL मनमाने ढंग से पंक्तियों को लौटाता है जब क्लॉज द्वारा कोई ऑर्डर नहीं किया जाता है