sql >> データベース >  >> RDS >> Oracle

Oracleで例外が発生した後もカーソルループ処理を続行する方法

    OracleでPL/SQLプロシージャを作成しており、カーソルをループしながら処理を行っています。エラー(例外)が発生した場合は、処理を中止せずに、エラーをログに記録して続行します。処理中。

    以下は、このような条件を処理するための例です。2つの例外セクションを作成しました。最初のセクションは、カーソルループ中のエラーを処理し、もう1つは、カーソルループ外の例外を処理します。

    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. PostgreSQL用のpgModelerの概要

    2. 制約付きの列を削除する方法は?

    3. MicrosoftT-SQLからOracleSQLへの変換

    4. MySQL / MariaDB/Perconaサーバーのアップグレードプロセスの自動テスト