sql >> Database >  >> RDS >> Oracle

Cursorlusverwerking voortzetten na uitzondering in Oracle

U maakt een PL/SQL-procedure in Oracle waarin u verwerking uitvoert terwijl u door de cursor loopt en als een fout (uitzondering) optreedt, wilt u de verwerking niet afbreken, maar wilt u de fout registreren en doorgaan met de verwerking.

Hieronder wordt het voorbeeld gegeven om met een dergelijke voorwaarde om te gaan, waarin ik twee uitzonderingssecties heb gemaakt, de eerste is om de fout af te handelen tijdens de cursorlus en de andere is om de uitzondering buiten de cursorlus af te handelen.

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. Als GETDATE() op veel plaatsen wordt gebruikt, is het dan beter om een ​​variabele te gebruiken?

  2. Hoe FIND_IN_SET() werkt in MariaDB

  3. Wat u moet weten MET NOCHECK bij het inschakelen van een CHECK-beperking in SQL Server

  4. Automatisch indexbeheer in Azure SQL Database