कहते हैं कि हम 3 तालिका में रिकॉर्ड:उत्प्रेरक
---------------------------------------------
| PK | Name | Address | Postal Code |
---------------------------------------------
| 1 | AA | Street1 | 11111 |
| 2 | BB | Street2 | 44444 |
| 3 | CC | Dtreet7 | 33333 |
---------------------------------------------
क्या ग्राहक चाहता है अद्यतन रिकॉर्ड और केवल अद्यतन कॉलम (है: orig_tab
---------------------------------------------
| PK | Name | Address | Postal Code |
---------------------------------------------
| 1 | AA | Street1 | 11111 |
| 2 | BB | Street2 | 22222 |
| 3 | CC | Street3 | 33333 |
---------------------------------------------
अब डेटा बदल गया है हाँ, मैं जानता हूँ कि यह कोई मतलब नहीं है लेकिन उन्होंने 1970 के दशक से कुछ पुराने सिस्टम का उपयोग करें और वे कुछ लॉगिंग आदि क्या करना चाहते हैं)। तो रिपोर्टिंग तालिका इस तरह होना चाहिए:
---------------------------------------------
| PK | Name | Address | Postal Code |
---------------------------------------------
| 2 | | | 44444 |
| 3 | | Dtreet7 | |
---------------------------------------------
मैं यह क्या करने की कोशिश की:
CREATE OR REPLACE TRIGGER vr_reporting_trigger
AFTER UPDATE ON orig_tab
FOR EACH ROW
BEGIN
IF inserting THEN
INSERT INTO rep_tab(pk, name, address, code)
SELECT :new.pk, :new.name, :new.address, :new,code FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM rep_tab WHERE pk = :new.pk);
UPDATE rep_tab t SET t.name = :new.name, t.address = :new.address, t.code = :new.code
WHERE t.pk = :new.pk;
ELSIF updating THEN
IF :new.pk <> :old.pk THEN
UPDATE rep_tab t
SET t.name = :new.name, t.address = :new.address, t.code =: new.code
WHERE t.pk = :old.pk ;
END IF;
MERGE INTO rep_tab d
USING DUAL ON (d.pk = :old.pk)
WHEN MATCHED THEN
UPDATE SET d.name = :new.name, d.address = :new.address, d.code =: new.code
WHEN NOT MATCHED THEN
INSERT (d.pk,d.name, d.address, d.code) VALUES (:new.pk,:new.name, new.address, new.code);
END IF;
END;
इस समाधान के साथ, मैं मिलता है:
---------------------------------------------
| PK | Name | Address | Postal Code |
---------------------------------------------
| 2 | BB | Street2 | 44444 |
| 3 | CC | Dtreet7 | 33333 |
---------------------------------------------
मैं जानता हूँ कि इसे कहीं डालने क्लॉस में है कि जब बयान को अद्यतन करने में, लेकिन मैं समझ नहीं कैसे इस क्लॉस मेरी आवश्यकता के अनुसार बदला है। कोई उपाय?
अग्रिम धन्यवाद।
+1, लेकिन 9i डॉक्स: उदाहरण के लिए, मान लें कि एक ट्रिगर निम्नलिखित के रूप में परिभाषित किया गया है? यहाँ [11g संस्करण] है (http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/triggers.htm#sthref771) –
यह अगर वें yolumn अद्यतन बयान का हिस्सा है को गति प्रदान करने लगता है। इतना ही नहीं अगर मान बदलता है। –