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

Oracle स्वायत्त लेनदेन उदाहरण

ओरेकल में, एक स्वायत्त लेनदेन मुख्य लेनदेन में वापस किए या रोल किए बिना उसी सत्र में डेटा को कमिट या रोलबैक कर सकता है। PRAGMA (कंपाइलर निर्देश) कथन का उपयोग Oracle में स्वायत्त लेनदेन को परिभाषित करने के लिए किया जाता है। निम्नलिखित एक Oracle स्वायत्त लेनदेन उदाहरण है।

Oracle में स्वायत्त लेनदेन को परिभाषित करने के लिए सिंटैक्स

PRAGMA AUTONOMOUS_TRANSACTION; /* in the declaration section of PL/SQL Block */

स्वायत्त लेनदेन के लिए Oracle संग्रहीत कार्यविधि उदाहरण

स्वायत्त लेनदेन के लिए निम्नलिखित Oracle संग्रहीत कार्यविधि किसी भी PL/SQL प्रोग्राम (प्रक्रियाओं, पैकेजों या कार्यों, आदि) में हुई त्रुटियों को लॉग करना है। यह त्रुटि जानकारी को तालिका error_log में सम्मिलित करेगा और किसी भी पीएल/एसक्यूएल प्रोग्राम में किसी भी मुख्य लेनदेन को प्रभावित किए बिना डेटा को प्रतिबद्ध करेगा। त्रुटि जानकारी लॉग करने के लिए आप किसी भी PL/SQL प्रोग्राम से इस प्रक्रिया को कॉल कर सकते हैं। नीचे मैं आपको दिखाऊंगा कि कैसे। अपने सिस्टम में परीक्षण के लिए निम्नलिखित ऑब्जेक्ट बनाएं:

टेबल एरर_लॉग बनाएं

CREATE TABLE error_log
(
   error_code          VARCHAR2 (100),
   error_msg           VARCHAR2 (4000),
   date_occurred       DATE,
   plsql_program_ref   VARCHAR2 (100)
)
/

लॉग त्रुटियों के लिए स्वायत्त लेनदेन के लिए Oracle संग्रहीत कार्यविधि

नीचे की प्रक्रिया में तीन पैरामीटर होते हैं, जिन्हें त्रुटि के समय अन्य संग्रहीत प्रक्रियाओं या कार्यों से प्रक्रिया को कॉल करते समय आपको पास करने की आवश्यकता होती है।

CREATE OR REPLACE PROCEDURE prc_log_errors (v_error_code      IN VARCHAR2,
                                            v_error_msg       IN VARCHAR2,
                                            v_plsql_program   IN VARCHAR2)
AS
   PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
   INSERT INTO error_log (ERROR_CODE,
                          ERROR_MSG,
                          DATE_OCCURRED,
                          PLSQL_PROGRAM_REF)
       VALUES (v_error_code,
               v_error_msg,
               SYSDATE,
               v_plsql_program);

   COMMIT;
END;
/

अब आप संग्रहीत कार्यविधि prc_log_errors . को कॉल कर सकते हैं त्रुटि जानकारी लॉग करने के लिए अन्य पीएल/एसक्यूएल प्रोग्राम के अपवाद हैंडलिंग अनुभाग से। यहां एक उदाहरण दिया गया है:

टेबल टेस्ट_डेटा बनाएं

CREATE TABLE test_data (some_data VARCHAR2 (100))
/

फ़ंक्शन बनाएं fnc_test

निम्न फ़ंक्शन कुछ डेटा को test_data . में सम्मिलित करेगा तालिका, और उसके बाद, यह त्रुटि उत्पन्न करेगा क्योंकि यह अगली पंक्ति में 0 से विभाजित हो रहा है। त्रुटि होने पर, अपवाद अनुभाग में, यह प्रक्रिया prc_log_errors . को कॉल कर रहा है त्रुटि लॉग करने के लिए। यदि फ़ंक्शन बिना किसी त्रुटि के निष्पादित होता है, तो यह TRUE लौटाएगा अन्यथा यह FALSE लौटाएगा। नीचे के मामले में, यह त्रुटि दर्ज करने के बाद FALSE लौटाएगा।

CREATE OR REPLACE FUNCTION fnc_test
   RETURN BOOLEAN
IS
   n   NUMBER;
BEGIN
   INSERT INTO test_data
       VALUES ('abc');

   /* generate error */
   n := 2 / 0;

   RETURN TRUE;
EXCEPTION
   WHEN OTHERS
   THEN
      prc_log_errors (TO_CHAR (SQLCODE), SQLERRM, 'FNC_TEST');
      RETURN FALSE;
END fnc_test;
/

परीक्षा

उपरोक्त फ़ंक्शन को कॉल करें fnc_test

BEGIN
   IF fnc_test
   THEN
      COMMIT;
   ELSE
      ROLLBACK;
   END IF;
EXCEPTION
   WHEN OTHERS
   THEN
      ROLLBACK;
END;
/

यहां तक ​​कि यह विफल होने पर भी वापस आ रहा है, लेकिन फिर भी, डेटा error_log तालिका में सहेजा जाएगा, क्योंकि प्रक्रिया prc_log_errors PRAGMA AUTONOMOUS_TRANSACTION का उपयोग कर रहा है ।

test_data तालिका जांचें, कोई रिकॉर्ड नहीं होना चाहिए।

SELECT * FROM test_data;

आउटपुट

no rows selected.

error_log तालिका में डेटा जांचें

SELECT * FROM error_log;

आउटपुट

ERROR_CODE ERROR_MSG	                        DATE_OCCURRED	PLSQL_PROGRAM_REF
-1476      ORA-01476: divisor is equal to zero	27/03/2019 15:43:12	FNC_TEST

यह भी देखें:

  • ओरेकल पीएल/एसक्यूएल बल्क कलेक्ट विथ सेव एक्सेप्शन उदाहरण

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. लेफ्ट जॉइन में शामिल पंक्तियों की संख्या गिनना

  2. Oracle पर ORDER के साथ INSERT करें

  3. pls_integer और binary_integer में क्या अंतर है?

  4. Oracle के लिए MyBatis बैच इन्सर्ट/अपडेट करें

  5. एक .Net एप्लिकेशन कैसे लिखें जो SqlServer और Oracle दोनों के साथ काम करता है (अब जबकि System.Data.OracleClient पदावनत है)