ओरेकल PL / SQL में ऑटोनोमस ट्रांजेक्शन: कमिट, रोलबैक

विषय - सूची:

Anonim

PL / SQL में TCL स्टेटमेंट क्या हैं?

टीसीएल ट्रांजैक्शन कंट्रोल स्टेटमेंट के लिए है। यह या तो लंबित लेनदेन को बचाएगा या लंबित लेनदेन को वापस करेगा। ये कथन महत्वपूर्ण भूमिका निभाते हैं क्योंकि जब तक लेनदेन को बचाया नहीं जाता तब तक डीएमएल बयानों के माध्यम से परिवर्तन डेटाबेस में सहेजे नहीं जाएंगे। नीचे विभिन्न बंधन कथन दिए गए हैं।

COMMIT सभी लंबित लेनदेन को बचाता है
रोलबैक सभी लंबित लेनदेन को छोड़ दें
पॉइंट सहेजें लेन-देन में एक बिंदु बनाता है जब तक रोलबैक बाद में किया जा सकता है
रोलबैक जारी रखें निर्दिष्ट <सहेजें बिंदु> तक सभी लंबित लेनदेन को छोड़ दें

लेनदेन निम्नलिखित परिदृश्यों के तहत पूरा होगा।

  • जब उपरोक्त में से कोई भी बयान जारी किया जाता है (SAVEPOINT को छोड़कर)
  • जब DDL स्टेटमेंट जारी किए जाते हैं। (डीडीएल ऑटो-कमिटमेंट स्टेटमेंट हैं)
  • जब DCL स्टेटमेंट जारी किए जाते हैं। (DCL ऑटो कमिटमेंट स्टेटमेंट हैं)

ऑटोनॉमस ट्रांजैक्शन क्या है

पीएल / एसक्यूएल में, डेटा पर किए गए सभी संशोधनों को लेनदेन कहा जाएगा। लेनदेन को पूर्ण माना जाता है जब उस पर बचत / त्याग लागू किया जाता है। यदि कोई बचत / त्याग नहीं दिया जाता है, तो लेनदेन को पूर्ण नहीं माना जाएगा और डेटा पर किए गए संशोधनों को सर्वर पर स्थायी नहीं बनाया जाएगा।

एक सत्र के दौरान किए गए कुछ संशोधनों के बावजूद, PL / SQL एक लेनदेन के रूप में पूरे संशोधन का इलाज करेगा और इस लेनदेन को उस सत्र में संपूर्ण लंबित परिवर्तनों को सहेजने / छोड़ने से प्रभावित करेगा। ऑटोनॉमस ट्रांज़ैक्शन डेवलपर को एक कार्यक्षमता प्रदान करता है जिसमें यह एक अलग लेनदेन में बदलाव करने और मुख्य सत्र लेनदेन को प्रभावित किए बिना उस विशेष लेनदेन को बचाने / त्यागने की अनुमति देता है।

  • यह स्वायत्त लेनदेन उपप्रोग्राम स्तर पर निर्दिष्ट किया जा सकता है।
  • किसी भी लेनदेन में काम करने के लिए कोई उपप्रोग्राम बनाने के लिए, उस खंड के घोषणात्मक अनुभाग में 'PRAGMA AUTONOMOUS_TRANSATION' शब्द दिया जाना चाहिए।
  • यह निर्देश देगा कि संकलक इसे अलग लेनदेन के रूप में मानें और इस ब्लॉक के अंदर बचत / त्याग मुख्य लेनदेन में प्रतिबिंबित नहीं होगा।
  • इस स्वायत्त लेनदेन से मुख्य लेनदेन से बाहर जाने से पहले COMMIT या ROLLBACK जारी करना अनिवार्य है क्योंकि किसी भी समय केवल एक लेनदेन सक्रिय हो सकता है।
  • इसलिए एक बार जब हमने एक स्वायत्त लेनदेन किया, तो हमें इसे बचाने और लेनदेन को पूरा करने की आवश्यकता है, तभी हम मुख्य लेनदेन पर वापस जा सकते हैं।

वाक्य - विन्यास:

DECLAREPRAGMA AUTONOMOUS_TRANSACTION;.BEGIN[COMMIT|ROLLBACK]END;/
  • उपरोक्त वाक्य रचना में, ब्लॉक को एक स्वायत्त लेनदेन के रूप में बनाया गया है।

उदाहरण 1 : इस उदाहरण में, हम यह समझने जा रहे हैं कि स्वायत्त लेनदेन कैसे काम कर रहा है।

DECLAREl_salary NUMBER;PROCEDURE nested_block ISPRAGMA autonomous_transaction;BEGINUPDATE empSET salary = salary + 15000WHERE emp_no = 1002;COMMIT;END;BEGINSELECT salary INTO l_salary FROM emp WHERE emp_no = 1001;dbms_output.put_line('Before Salary of 1001 is'|| l_salary);SELECT salary INTO l_salary FROM emp WHERE emp_no = 1002;dbms_output.put_line('Before Salary of 1002 is'|| l_salary);UPDATE empSET salary = salary + 5000WHERE emp_no = 1001;nested_block;ROLLBACK;SELECT salary INTO l_salary FROM emp WHERE emp_no = 1001;dbms_output.put_line('After Salary of 1001 is'|| l_salary);SELECT salary INTO l_salary FROM emp WHERE emp_no = 1002;dbms_output.put_line('After Salary of 1002 is '|| l_salary);end;

उत्पादन

Before:Salary of 1001 is 15000Before:Salary of 1002 is 10000After:Salary of 1001 is 15000After:Salary of 1002 is 25000

कोड स्पष्टीकरण:

  • कोड लाइन 2 : NUMBER के रूप में l_salary की घोषणा करना।
  • कोड लाइन 3 : नेस्टेडब्लॉक प्रक्रिया घोषित करना
  • कोड पंक्ति 4 : 'AUTONOMOUS_TRANSACTION' के रूप में नेस्टेडब्लॉक प्रक्रिया बनाना।
  • कोड लाइन 7-9: कर्मचारी संख्या 1002 के लिए वेतन में 15000 की वृद्धि।
  • कोड लाइन 10: लेनदेन करना।
  • कोड लाइन 13-16: परिवर्तन से पहले कर्मचारी के वेतन विवरण को 1001 और 1002 में प्रिंट करना।
  • कोड लाइन 17-19: कर्मचारी संख्या 1001 के लिए 5000 से बढ़ाकर वेतन।
  • कोड लाइन 20: नेस्टेडब्लॉक प्रक्रिया को कॉल करना;
  • कोड लाइन 21: मुख्य लेनदेन को छोड़ना।
  • कोड लाइन 22-25: परिवर्तनों के बाद कर्मचारी के वेतन विवरणों को 1001 और 1002 में प्रिंट करना।
  • कर्मचारी संख्या 1001 के लिए वेतन वृद्धि परिलक्षित नहीं होती है क्योंकि मुख्य लेनदेन को छोड़ दिया गया है। कर्मचारी संख्या 1002 के लिए वेतन वृद्धि परिलक्षित होती है क्योंकि उस ब्लॉक को एक अलग लेनदेन के रूप में बनाया गया है और अंत में बचाया गया है।
  • मुख्य लेनदेन में बचत / त्याग के बावजूद स्वायत्त लेनदेन में परिवर्तन मुख्य लेनदेन परिवर्तनों को प्रभावित किए बिना बचाया गया है।