यदि एक अद्यतन के बाद पूरी पंक्ति समान रहती है, तो ट्रिगर की जांच कैसे करें?


11

निश्चित रूप से मैं इसे इस तरह से तुलना करने वाले हर कॉलम के लिए कर सकता था:

if (old.column1 = new.column1 and old.column2 = new.column2...)

उदाहरण के लिए, यदि मैं भविष्य में एक और कॉलम जोड़ता हूं, तो इसे कठिन कोडित और बनाए रखना मुश्किल होगा।

क्या यह जांचने का एक तरीका है कि क्या सभी कॉलम प्रत्येक व्यक्ति के कॉलम को मैन्युअल रूप से जांचे बिना समान रहते हैं?


- आप को छोड़कर इस्तेमाल कर सकता हूँ techonthenet.com/postgresql/except.php
स्कॉट Hodgin

क्षमा करें, लेकिन मेरे मामले में EXCEPT का उपयोग कैसे किया जाएगा? मैं नई पंक्ति मानों के साथ पुरानी पंक्ति की तुलना करने की कोशिश कर रहा हूं, जो मुझे EXCEPT के बारे में पता है, इसका उपयोग दो पंक्तियों से मौजूदा पंक्तियों की तुलना करने के लिए किया जाता है, एक ट्रिगर के पुराने / नए संदर्भ में नहीं ...
Mateus Viccari

मैं आपके dbms से परिचित नहीं हूँ- क्या नया चुनने का कोई तरीका है। * पुराने को छोड़कर। * यदि पंक्ति पंक्ति = 0, कोई पंक्तियाँ नहीं बदलीं
स्कॉट होडगिन

जवाबों:


15

आप केवल oldउन newरिकॉर्डों की तुलना कर सकते हैं, is not distinct fromजिनका उपयोग करके NULL मानों को सही ढंग से संभालता है (यदि सभी कॉलम को NULL के रूप में परिभाषित नहीं किया गया है तो आप बस उपयोग कर सकते हैं =या <>)

if old is not distinct from new then 
   .... do something
end if;

यदि कम से कम एक कॉलम बदला गया है, तो यह जांचने के लिए किया जा सकता है:

if old is distinct from new then 
   .... do something
end if;

कैसे NULLs इन संघों द्वारा नियंत्रित किया जाता है?
ypercube y

@ ypercube y: अच्छी बात है। मैंने अपना उत्तर अपडेट कर दिया।
a_horse_with_no_name

Thnx। मैंने एक त्वरित जांच की और ऐसा लगता है कि old=newमामले को बिल्कुल उसी तरह से संभालता है old is not distinct from old। दूसरे शब्दों में, मुझे ऐसा मामला नहीं मिला, जहाँ old=newNULL परिणाम देता हो। मुझे उम्मीद नहीं थी कि!
ypercube y

मुझे लगता है कि अंतर होगा old <> newलेकिन मैं पूरी तरह से निश्चित नहीं हूं।
a_horse_with_no_name 12
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.