उत्परिवर्तन तालिका त्रुटि का सबसे संभावित कारण ट्रिगर का दुरुपयोग है। यहाँ एक विशिष्ट उदाहरण है:
- आप तालिका A में एक पंक्ति सम्मिलित करते हैं
- तालिका ए (प्रत्येक पंक्ति के लिए) पर एक ट्रिगर तालिका ए पर एक क्वेरी निष्पादित करता है, उदाहरण के लिए एक सारांश कॉलम की गणना करने के लिए
- ओरेकल एक ORA-04091 फेंकता है: तालिका A म्यूटिंग है, ट्रिगर / फ़ंक्शन इसे नहीं देख सकता है
यह एक अपेक्षित और सामान्य व्यवहार है, ओरेकल की गारंटी के बाद से ओरेकल आपको खुद से बचाना चाहता है:
- (i) कि प्रत्येक कथन परमाणु है (अर्थात या तो विफल होगा या पूरी तरह से सफल होगा)
- (ii) कि प्रत्येक कथन में डेटा का एक सुसंगत दृश्य दिखाई देता है
सबसे अधिक संभावना है कि जब आप इस तरह का ट्रिगर लिखते हैं तो आप क्वेरी (2) को पंक्ति (1) में डाली गई पंक्ति को देखने की उम्मीद करेंगे। यह ऊपर दिए गए दोनों बिंदुओं के साथ विरोधाभास होगा क्योंकि अद्यतन अभी तक समाप्त नहीं हुआ है (सम्मिलित किए जाने के लिए अधिक पंक्तियाँ हो सकती हैं)।
ओरेकल कथन की शुरुआत से ठीक पहले समय में एक बिंदु के साथ परिणाम को वापस कर सकता है, लेकिन अधिकांश उदाहरणों से मैंने देखा है कि इस तर्क को लागू करने का प्रयास करें, लोग बहु-पंक्ति वाले बयान को क्रमिक चरणों के सीरी के रूप में देखते हैं और सबसे अधिक उम्मीद करते हैं कथन [2] पिछले चरणों द्वारा किए गए परिवर्तनों को देखने के लिए। ओरेकल अपेक्षित परिणाम नहीं दे सकता है और इसलिए त्रुटि फेंकता है।
आगे पढ़ने के लिए: आस्क टॉम पर "म्यूटिंग टेबल" ।
अगर मुझे संदेह है कि उत्परिवर्तन तालिका त्रुटि का कारण एक ट्रिगर है, तो त्रुटि से बचने का एक तरीका प्रक्रियाओं में तर्क को ट्रिगर से बाहर ले जाना है।