sql >> Database teknologi >  >> RDS >> Oracle

Sådan fortsætter du Cursor Loop-behandling efter undtagelse i Oracle

Du opretter en PL/SQL-procedure i Oracle, hvor du behandler, mens du går gennem markøren, og hvis en fejl (undtagelse) opstår, vil du ikke afbryde behandlingen, men du vil logge fejlen og fortsætte med behandling.

Nedenfor er eksemplet givet til at håndtere en sådan tilstand, hvor jeg har oprettet to undtagelsessektioner, den første er til at håndtere fejlen mens cursor loop og den anden er til at håndtere undtagelse uden for cursor loop.

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. Ligheder og forskelle mellem funktionerne RANK, DENSE_RANK og ROW_NUMBER

  2. Understøtter SQLDeveloper eksekvering af scripts?

  3. Implementering af Django + Python 3 + PostgreSQL til AWS Elastic Beanstalk

  4. Sådan finder du den sidste dag i måneden for en given dato i MySQL