oracle – ORA-01403: datos no encontrados y ORA-06512

SET SERVEROUTPUT ON SIZE 1000000
SET VERIFY OFF
SET FEEDBACK OFF
SET HEAD OFF
SET LINESIZE 30000
SET PAGESIZE 10000
SET ECHO OFF
SET TIMING OFF
SET TRIMSPOOL ON

SPOOL "/orabatch/norkom/AML/dat/Actualizacion_diaria_risco_cliente.txt"

DECLARE
/*variables para lectura de archivo e insercción*/
    p_ruta              VARCHAR2(32767) := 'DIRECTORIO_ENTRADA'; --variable de la ruta
    p_filename          VARCHAR2(32767) := 'CVM_Layout.csv'; --variable nombre del archivo .csv
    p_deli              VARCHAR2(32767) := ';'; --delimitador del archivo ;
    v_archivo           utl_file.file_type; -- variable que contendrá el archivo
    v_linea             VARCHAR2(32767); --variable lineas
    v_lineab            VARCHAR2(32767); --variable lineas
    v_idx               PLS_INTEGER;
    v_nrocampo          NUMBER := 0; --número de campos
    v_salida            VARCHAR2(32767); --
    v_reg               NUMBER := 0; -- contador de filas
    v_customer_id       VARCHAR2(32);
    v_sa_coddoc         VARCHAR2(20);
    v_score_timestamp   TIMESTAMP(6);
    v_score             FLOAT(126);
    v_risk_level        VARCHAR2(80);
    v_review_period     NUMBER(38);
    CURSOR c_san_consulta_risco_cliente IS
        SELECT
            customer_id,
            sa_coddoc,
            score_timestamp,
            score,
            risk_level,
            review_period
        FROM
            nkm.san_consulta_risco_cliente;

BEGIN


-- Abrir el archivo «CVM_Layout.csv» ubicado en «» modo lectura
    v_archivo := utl_file.fopen(p_ruta,p_filename,'R');
    LOOP

--v_salida := ''; -- inicializar la variable v_salida
        utl_file.get_line(v_archivo,v_linea); -- leer las líneas del v_archivo y capturar sus datos en memoria
        v_lineab := v_linea;
        v_reg := v_reg + 1; -- contador de filas
        v_nrocampo := 0;
        IF
            v_reg > 1
        THEN
            LOOP
                v_nrocampo := v_nrocampo + 1; -- conteo de campos
                v_idx := instr(v_lineab,p_deli); -- la posición del caracter delimitador que define el campo
-- Leer y organizar los datos contenidos en el archivo
                IF
                    v_idx > 0
                THEN
                    v_linea := ( substr(
                        v_lineab,
                        1,
                        v_idx - 1
                    ) );
                    v_lineab := substr(
                        v_lineab,
                        v_idx + length(p_deli)
                    );
                    IF
                        v_nrocampo = 1
                    THEN
                        v_customer_id := v_linea;
                    ELSIF v_nrocampo = 2 THEN
                        v_sa_coddoc := v_linea;
                    ELSIF v_nrocampo = 3 THEN
                        v_score_timestamp := to_timestamp(v_linea);
                     --dbms_output.put_line('Mi sin cambiar:' || v_score_timestamp);
-- DBMS_OUTPUT.PUT_LINE('Mi dato cambiado:' || TO_TIMESTAMP(v_score_timestamp));
                    ELSIF v_nrocampo = 4 THEN
                        v_score := to_number(v_linea);
                       --dbms_output.put_line('Mi sin cambiar:' || v_score);
-- DBMS_OUTPUT.PUT_LINE('Mi dato cambiado:' || TO_NUMBER(v_score));
                    ELSE
                        v_risk_level := v_linea;
                    END IF;

                ELSE
                    v_linea := ( substr(
                        v_lineab,
                        1,
                        length(v_lineab) - 1
                    ) );

                    v_review_period := to_number(v_linea);
                    --dbms_output.put_line('Mi sin cambiar:' || v_review_period);
-- DBMS_OUTPUT.PUT_LINE('Mi dato cambiado:' || TO_NUMBER(v_review_period));
                END IF;

                EXIT WHEN v_idx < 0 OR v_idx = 0;
            END LOOP;

            --dbms_output.put_line('Estoy en la fila ' || v_reg);
    
            dbms_output.put_line(''
             || v_customer_id
             || '; '
             || v_sa_coddoc
             || '; '
             || v_score_timestamp
             || '; '
             || v_score
             || '; '
             || v_risk_level
             || '; '
             || v_review_period
             || ';');


            INSERT INTO nkm.san_consulta_risco_cliente (
                customer_id,
                sa_coddoc,
                score_timestamp,
                score,
                risk_level,
                review_period
            ) VALUES (
                v_customer_id,
                v_sa_coddoc,
                v_score_timestamp,
                v_score,
                v_risk_level,
                v_review_period
            );

            COMMIT;
        END IF;
        
    END LOOP;

    utl_file.fclose(v_archivo); -- cerrar el archivo abierto
   

END;
/

SPOOL OFF
EXIT;

Me salen los siguientes errores DECLARE
*
ERRO na linha 1:
ORA-01403: dados n▒o encontrados
ORA-06512: em “SYS.UTL_FILE”, line 106
ORA-06512: em “SYS.UTL_FILE”, line 746
ORA-06512: em line 38

Estoy insertando datos en una tabla a partir de un archivo csv y escribiendo con SPOOL la salida de datos en un .txt pero al parecer cuando no encuentra mas datos para escribir me escribe el error en el txt y lo que quiero hacer es que cuando no encuentre datos no escriba el error.
¿Alguna sugerencia? lo agradecería mucho si me dierais alguna solución concreta.