में रिकर्सिव ट्रिगर को रोकें ट्रिगर के पुनरावर्ती निष्पादन को कैसे रोकें? मान लीजिए कि मैं खाते के चार्ट पर "पेड़-सक्षम" विवरण बनाना चाहता हूं। तो मैं क्या करता हूं जब एक नया रिकॉर्ड डाला/अपडेट किया जाता है, तो मैं अभिभावक रिकॉर्ड के down_qty
को अद्यतन करता हूं, इसलिए यह अद्यतन ट्रिगर को दोबारा ट्रिगर करेगा।PostgreSQL
अभी, मेरे कोड ठीक है - मैं UPDATE
ट्रिगर की पहली लाइन पर डाल:
-- prevents recursive trigger
if new.track_recursive_trigger <> old.track_recursive_trigger then
return new;
end if;
और जब मैं माता पिता के रिकॉर्ड की मात्रा को अपडेट करना होगा यह मेरा ट्रिगर से नमूना कोड है:
update account_category set
track_recursive_trigger = track_recursive_trigger + 1, -- i put this line to prevent recursive trigger
down_qty = down_qty - (old.down_qty + 1)
where account_category_id = m_parent_account;
मैं सोच रहा हूं कि पोस्टग्रेएसक्यूएल में एक नया क्षेत्र शुरू किए बिना रिकर्सिव ट्रिगर का पता लगाने के लिए कोई तरीका है, एमएसएसक्यूएल के trigger_nestlevel
के समान कुछ।
[संपादित करें]
मैं पेड़ के अंदर पाश, मैं बबल सामने प्रत्येक account_category
वापस उसकी जड़ के down_qty
की जरूरत है। उदाहरण के लिए, मैं एक नया खाता श्रेणी, यह जब मैं खाता श्रेणी के माता-पिता account_category
बदल अपनी मूल account_category
की down_qty
बढ़ाने के लिए की जरूरत है, वैसे ही डालें, मैं account_category
के पिछले माता पिता account_category
की down_qty
घटती की जरूरत है। हालांकि मुझे लगता है कि यह कर सकता है, मैं PostgreSQL को रिकर्सिव ट्रिगर नहीं दे रहा हूं। मैंने एमएसएसएलएल का उपयोग किया था, जहां ट्रिगर रिकर्सिव गहराई का स्तर केवल 16
स्तर तक ही सीमित है।
मुझे लगता है कि आप थोड़ा में अधिक जानकारी के व्याख्या करनी चाहिए, जहाँ तक मैं देख सकता हूँ वहाँ यहाँ में पुनरावर्ती कॉल का कोई खतरा नहीं है, क्योंकि जब तक आप या तो : रिकॉर्ड जो अपने माता-पिता हैं, या आपके पेड़ में लूप (जो तब पेड़ नहीं है)। –