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

Oracle में अपवाद के बाद कर्सर लूप प्रोसेसिंग कैसे जारी रखें

आप ओरेकल में एक पीएल/एसक्यूएल प्रक्रिया बना रहे हैं जिसमें आप कर्सर के माध्यम से लूपिंग करते समय प्रसंस्करण कर रहे हैं और यदि कोई त्रुटि (अपवाद) उठाती है तो आप प्रसंस्करण को रोकना नहीं चाहते हैं लेकिन आप त्रुटि लॉग करना चाहते हैं और जारी रखना चाहते हैं प्रसंस्करण।

नीचे ऐसी स्थिति को संभालने के लिए उदाहरण दिया गया है, जिसमें मैंने दो अपवाद खंड बनाए हैं, पहला कर्सर लूप के दौरान त्रुटि को संभालना है और दूसरा कर्सर लूप के बाहर अपवाद को संभालना है।

SET SERVEROUTPUT ON;
DECLARE
   CURSOR c_emp
   IS
      SELECT ROWNUM, empno, ename FROM emp;

   vn        NUMBER;
   vsqlcode   VARCHAR2 (20);
   vsqlerrm   VARCHAR2 (4000);
BEGIN
   FOR c IN c_emp
   LOOP
      BEGIN
         IF c.ROWNUM = 3
         THEN
            -- Generate an error at line 3
            vn := 'x';
         END IF;

      EXCEPTION
         WHEN OTHERS
         THEN

            vsqlcode := SQLCODE;
            vsqlerrm := SQLERRM;

            INSERT INTO error_log (error_no, ERROR_TEXT)
                VALUES (vsqlcode, vsqlerrm);
      END;
   END LOOP;

   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN 
            vsqlcode := SQLCODE;
            vsqlerrm := SQLERRM;

      ROLLBACK;
            INSERT INTO error_log (error_no, ERROR_TEXT)
                VALUES (vsqlcode, vsqlerrm);
      Commit;
END;

  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. SearchOracle.com पर एडीडीएम

  3. ORA-12728:रेगुलर एक्सप्रेशन में अमान्य श्रेणी

  4. Oracle डेटाटाइम फ़ंक्शंस (पूरी सूची)

  5. सामान्य कॉलम (ए, बी) और (ए, सी) के साथ 2 प्रश्नों को केवल एक (ए, बी, सी) में कैसे बदलें?