Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

PLSQL अपवाद में रोलबैक

सबसे पहले, मुझे लगता है कि हम सिंटैक्स त्रुटियों को अनदेखा कर सकते हैं (उदाहरण के लिए, कोई END LOOP नहीं है। , dbms_output.put_line कॉल में पहला सिंगल कोट नहीं है, आदि)

परिवर्तनों को वापस लेना आवश्यक है या नहीं, यह निर्भर करता है।

सामान्य तौर पर, आपके पास लूप में अंतरिम कमिट नहीं होगा। यह आम तौर पर एक खराब वास्तुकला है क्योंकि यह I/O और बीता हुआ समय के मामले में बहुत अधिक महंगा है। यह पुनरारंभ करने योग्य कोड लिखना भी कठिन बनाता है। क्या होता है, उदाहरण के लिए, यदि आपका SELECT कथन 10 पंक्तियों का चयन करता है, आप 5 अपडेट जारी करते हैं (और प्रतिबद्ध), और फिर 6 वां अपडेट विफल हो जाता है? अपवाद को ठीक करने के बाद छठी पंक्ति के साथ पुनरारंभ करने में सक्षम होने का एकमात्र तरीका एक अलग तालिका होगी जहां आपने अपने कोड की प्रगति को संग्रहीत (और अपडेट) किया था। यह किसी भी कोड के लिए समस्याएँ भी पैदा करता है जो इस ब्लॉक को कॉल करता है जिसे तब इस मामले को संभालना होता है कि आधा काम किया गया था (और प्रतिबद्ध था) और दूसरा आधा नहीं था।

सामान्य तौर पर, आप केवल अपने कोड के सबसे बाहरी ब्लॉक में लेनदेन नियंत्रण विवरण डालेंगे। चूंकि COMMIT या एक ROLLBACK एक प्रक्रिया में सत्र में किए गए किसी भी कार्य को करता है या वापस लेता है चाहे वह प्रक्रिया द्वारा किया गया हो या नहीं, आप लेनदेन नियंत्रण विवरण जोड़ने के बारे में बहुत सतर्क रहना चाहते हैं। आप आम तौर पर कॉल करने वाले को यह निर्धारित करने देना चाहते हैं कि क्या करना है या वापस रोल करना है। बेशक, यह केवल इतना आगे जाता है-- अंत में, आप सबसे बाहरी ब्लॉक में होने जा रहे हैं जिसे कभी भी किसी अन्य रूटीन से नहीं बुलाया जाएगा और आपको उचित लेनदेन नियंत्रण की आवश्यकता है- लेकिन यह बहुत सावधान रहने वाली बात है इस बारे में कि यदि आप कोड लिख रहे हैं जिसका पुन:उपयोग किया जा सकता है।

इस मामले में, चूंकि आपके पास अंतरिम प्रतिबद्धताएं हैं, आपके ROLLBACK . का एकमात्र प्रभाव यह होगा कि यदि पहला अपडेट स्टेटमेंट विफल हो जाता है, तो इस ब्लॉक को कॉल करने से पहले आपके सत्र में जो काम किया गया था, उसे वापस ले लिया जाएगा। यदि पहला अद्यतन विवरण सफल होता है तो अंतरिम प्रतिबद्धता उन पिछले परिवर्तनों को प्रतिबद्ध करेगी। जब लोग इस बारे में बात करते हैं कि अंतरिम प्रतिबद्धता और पुन:प्रयोज्य ब्लॉकों में लेनदेन नियंत्रण समस्याग्रस्त क्यों हैं, तो यह उस तरह का दुष्प्रभाव है जिसके बारे में लोग चिंता करते हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-01799:हो सकता है कि एक कॉलम सबक्वेरी से बाहरी-जुड़ा न हो

  2. ORA-01882 प्राप्त करना:समयक्षेत्र क्षेत्र Oracle UCP के साथ नहीं मिला, aws ec2 उदाहरण पर?

  3. Oracle स्कीमा उपयोगकर्ता प्रक्रिया में तालिका नहीं बना सकता

  4. टॉमकैट gdk_custom.jar नहीं ढूँढ सकता, Oracle इसे नहीं बना सकता?

  5. Oracle ऐप्स में FD_LOBS तालिका के बारे में आपको जो बातें अवश्य जाननी चाहिए