वहाँ मत जाओ।
ORA-04091: table XXXX is mutating
आम तौर पर एक अच्छा संकेतक है कि आप जो कुछ भी करने का प्रयास कर रहे हैं वह बहुत जटिल है विश्वसनीय रूप से किया जा सकता है ट्रिगर के साथ।
ज़रूर, आप पैकेज ऐरे वैरिएबल और कुछ ट्रिगर का इस्तेमाल कर सकते हैं ( उह!) इस त्रुटि को दूर करने के लिए, लेकिन आपके कोड की सबसे अधिक संभावना होगी:
- इसकी जटिलता और ट्रिगर की अप्रत्याशित प्रकृति के कारण इसे बनाए नहीं रखा जा सकता
- बहु-उपयोगकर्ता परिवेश के लिए अच्छी प्रतिक्रिया नहीं
यही कारण है कि जब आप इस त्रुटि का सामना करते हैं तो आपको अपने दृष्टिकोण पर फिर से विचार करना चाहिए। मैं आपको सलाह देता हूं कि अंतर-पंक्ति स्थिरता से निपटने के लिए एक पैकेज में अच्छी तरह से समूहीकृत प्रक्रियाओं का एक सेट बनाएं। तालिका को सीधे DML करने के सभी विशेषाधिकार निरस्त करें और इसे संशोधित करने के लिए केवल उन्हीं प्रक्रियाओं का उपयोग करें।
उदाहरण के लिए आपकी अद्यतन प्रक्रिया एक परमाणु . होगी प्रक्रिया जो:
- पंक्तियों के एक ही समूह पर समवर्ती अद्यतन को रोकने के लिए एक लॉक प्राप्त करें (उदाहरण के लिए एक होटल आरक्षण आवेदन में कमरे के रिकॉर्ड को लॉक करें)।
- जांचें कि सम्मिलित की जाने वाली पंक्ति सभी व्यावसायिक तर्कों को मान्य करती है
- सभी प्रासंगिक डीएमएल बनाएं
- त्रुटि के मामले में अपने सभी परिवर्तनों (और केवल इसके परिवर्तन - संपूर्ण लेनदेन नहीं) को रोलबैक करता है (पीएल/एसक्यूएल के साथ आसान, बस एक त्रुटि उठाएं)।