कार्यक्रम में इस तरह प्रतिबद्धता रखने का क्या प्रभाव है?
Oracle दस्तावेज़ीकरण COMMIT
. का वर्णन करता है के रूप में:
उद्देश्य
COMMIT
का उपयोग करें आपके वर्तमान लेन-देन को समाप्त करने और लेन-देन में किए गए सभी परिवर्तनों को स्थायी बनाने के लिए विवरण। एक लेन-देन SQL कथनों का अनुक्रम है जिसे Oracle डेटाबेस एक एकल इकाई के रूप में मानता है। यह कथन लेन-देन के सभी बचत बिंदुओं को भी मिटा देता है और लेन-देन के ताले को हटा देता है।
यदि आपके पास तीन PROCEDURE
हैं और प्रत्येक में एक COMMIT
होता है कथन तो आप तीनों को नहीं चला सकते हैं, यदि बाद वाले में कोई अपवाद होता है, ROLLBACK
उन सभी के रूप में पहले दो से परिवर्तन पहले से ही COMMIT
. होंगे टेड.
एक सामान्य नियम के रूप में, आपको नहीं . करना चाहिए COMMIT
का उपयोग करें एक PROCEDURE
. में या FUNCTION
लेकिन इसे कॉल करने वाले पर COMMIT
. पर छोड़ देना चाहिए लेन-देन ताकि वे एक साथ कई कार्रवाइयों को बंडल कर सकें।
बेशक, ऐसे मामलों का उपयोग करें जहां आप इस नियम का उल्लंघन करना चाहते हैं, लेकिन आपको प्रत्येक मामले पर अलग से विचार करना चाहिए और इस नियम को तोड़ने से पहले अपने व्यावसायिक तर्क को पूरी तरह से समझने के लिए समय निकालना चाहिए ताकि आप जान सकें कि COMMIT
क्या है प्रत्येक उदाहरण में टेड।
क्या मुझे यह लेन-देन AUTONOMOUS_TRANSACTION
. के रूप में करना चाहिए? ?
एक उपयोग-मामला लॉगिंग है - आपके पास एक PROCEDURE
हो सकता है जो एक और PROCEDURE
calls को कॉल करता है उपयोगकर्ता के कार्यों को लॉग करने के लिए और, भले ही प्रारंभिक क्रिया सफल हो या विफल हो, आप कार्रवाई का लॉग रखना चाहते हैं और यह सुनिश्चित करना चाहते हैं कि लॉग COMMIT
है टेड इस मामले में, लॉगिंग PROCEDURE
एक AUTONOMOUS_TRANSACTION
होना चाहिए और इसमें एक COMMIT
हो स्टेटमेंट और कॉलिंग स्टेटमेंट में (शायद) न तो होना चाहिए।
तो, अगर COMMIT
एक PROCEDURE
हमेशा आवश्यक होता है और यह इस बात से स्वतंत्र होता है कि कॉलर COMMIT
है या नहीं अन्य डेटा के बाद PROCEDURE
बनाएं एक AUTONOMOUS_TRANSACTION
. अगर PROCEDURE
s को एक साथ बंडल किया जा सकता है और फिर ROLLBACK
एक समूह के रूप में तो आप उन्हें AUTONOMOUS_TRANSACTION
. नहीं बनाना चाहते एस.