sql >> Databasteknik >  >> RDS >> Oracle

Hur man fortsätter att bearbeta markörslingor efter undantag i Oracle

Du skapar en PL/SQL-procedur i Oracle där du bearbetar samtidigt som du går igenom markören och om något fel (undantag) uppstår så vill du inte avbryta bearbetningen men du vill logga felet och fortsätta bearbetning.

Nedan är exemplet som ges för att hantera ett sådant tillstånd, där jag har skapat två undantagssektioner, den första är att hantera felet medan markörslingan och den andra är att hantera undantag utanför markörslingan.

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. få senaste tre månaders poster från tabellen

  2. Hämta värden från första och sista raden per grupp

  3. Så här felsöker du 10 Common Access 2019-problem

  4. Hur REGEXP_INSTR()-funktionen fungerar i MySQL