सामान्य तौर पर, प्रक्रियाओं को प्रतिबद्ध नहीं होना चाहिए। लेन-देन नियंत्रण निर्णयों के उन प्रकारों को उच्च-स्तरीय कोड पर छोड़ दिया जाना चाहिए जो जानते हैं कि वास्तव में तार्किक लेनदेन कब पूरा होता है। यदि आप एक संग्रहीत प्रक्रिया के अंदर करते हैं, तो आप इसकी पुन: प्रयोज्यता को सीमित कर रहे हैं क्योंकि एक कॉलर जो प्रक्रिया में बदलाव करना चाहता है वह एक बड़े लेनदेन का हिस्सा है, बस प्रक्रिया को सीधे कॉल नहीं कर सकता है।
यदि आप एक प्रक्रिया को अंतःक्रियात्मक रूप से कहते हैं, तो आपको लेन-देन को स्पष्ट रूप से कमिट या रोलबैक करना होगा क्योंकि ऑरेकल के पास कोई विचार नहीं है यदि आप प्रक्रिया कॉल को तार्किक लेन-देन करने का इरादा रखते हैं या यदि आप कई प्रक्रिया कॉलों को शामिल करने वाले बड़े लेनदेन की रचना करना चाहते हैं। यदि आप उपयोग करते हैं dbms_scheduler
, तो dbms_scheduler
मान लेते हैं कि नौकरी एक तार्किक लेनदेन है और नौकरी के अंत में यह मानते हुए कि यह सफल था ( dbms_job
वही काम करता है)।
फ़ंक्शंस को पहली बार में डेटा में हेरफेर नहीं करना चाहिए। एक फ़ंक्शन जो डेटा में हेरफेर करता है, उसे एसक्यूएल स्टेटमेंट (कोने के मामले को छोड़कर जहां फ़ंक्शन स्वयं को एक स्वायत्त लेनदेन का उपयोग करने के लिए घोषित किया जाता है) से कॉल नहीं किया जा सकता है)। फ़ंक्शंस और प्रक्रिया दोनों होने की पूरी बात यह है कि फ़ंक्शन एसक्यूएल स्टेटमेंट्स में एम्बेड किए जा सकते हैं और उपयोगकर्ताओं को अधिक स्वतंत्र रूप से प्रदान किए जा सकते हैं क्योंकि वे अपना डेटा नहीं बदलते हैं।