Hacia tiempo que no me ocurria un error como este y no se como solucionarlo, el problema es el siguiente:
Tengo el siguiente codigo el cual he retocado un poco para poder realizar una copia de informacion que se necesita en la empresa (he colocado el modificado ya q el original presenta el mismo problema) a medida que le hacia pruebas estaba mas satisfecho con el funcionamiento hasta que me ocurrio un error con una información, cuando digito esa cotización automaticamente me retorna el error ORA-01403: No se ha encontrado ningun dato. Pero descubri que el error es por un valor en la BD adjunto tabla.
Tabla original vista por el toad almacenada en excel.

Tabla modificada vista por el toad almacenada en excel

El valor que aparece resaltado en la segunda tabla es el que me genera el siguiente error por lo menos en este caso

Adjunto anexo una imagen de los tipos de datos de la tabla con la descripcion.

Aclaro que el procedimiento original esta en funcionamiento y que ese error sucede en algunas ocasiones y la unica solucion que hemos encontrado es quitar todos la informacion de esa columna en esa tabla con respecto al numero de cotizacion.
Les agradezco de antemano la ayuda que me puedan brindar.
Ahora el codigo del procedimiento.
Código:
--CREATE OR REPLACE PROCEDURE Pobrcopadicion(PNUMCOTI VARCHAR2,pcodcap VARCHAR2 DEFAULT NULL,PNUMOBR2 VARCHAR2,ptipo VARCHAR2) IS
declare
CURSOR cAntCapitulos IS
select codigo,DESCRIPCION,CODCOTI,CODPADRE,COMENTARIOS,FECINICIAL,DURACION,FECREQUERIDA,TBUNMED_ID,CODEXT,CANTIDAD,VALOR from(
SELECT UNIQUE *
FROM TDCAPCOTI
WHERE codcoti = :pnumcoti
CONNECT BY PRIOR codigo = codpadre
AND PRIOR codcoti = :pnumcoti
START WITH codigo =NVL(TO_NUMBER(:pcodcap),codigo) --codigo --pcodcap
AND codcoti = :pnumcoti)
group by codigo,DESCRIPCION,CODCOTI,CODPADRE,COMENTARIOS,FECINICIAL,DURACION,FECREQUERIDA,TBUNMED_ID,CODEXT,CANTIDAD,VALOR;
---
TYPE tCodigos IS TABLE OF NUMBER(10)
INDEX BY BINARY_INTEGER;
vCodPadres tCodigos;
CURSOR cNuevObra IS
SELECT 'x'
FROM TBOBRATEC
WHERE codigo = :pnumobr2;
vDummy VARCHAR2(1);
vCodigo NUMBER(10) := NULL;
BEGIN
/************************
Verifico que exista la Obra en la que se va a insertar el nuevo capitulo.
************************/
OPEN cNuevObra;
FETCH cNuevObra INTO vDummy;
IF cNuevObra%NOTFOUND THEN
RAISE_APPLICATION_ERROR(-20010,'No existe la Obra en la que se desea copiar el capitulo.');
-- PForMsgBox('No existe la Obra en la que se desea copiar el capitulo.','ERROK');
END IF;
CLOSE cNuevObra;
/************************
Hallo el siguiente consecutivo de la serie.
************************/
SELECT NVL(MAX(codigo),0)+1 INTO vCodigo
FROM TDCAPOBRAS
WHERE tbobratec_cod = :pnumobr2;
/************************
Inserto los capitulos.
************************/
FOR fila IN cAntCapitulos LOOP
vCodPadres(fila.codigo) := vCodigo;
DECLARE
vCodauxPadre NUMBER(10);
BEGIN
IF fila.codPadre IS NULL THEN
vcodAuxPadre := NULL;
ELSE
vCodAuxPadre := vCodPadres(fila.codpadre);
-- dbms_output.put_line(' El valor de vCodPadres('||fila.codpadre||') es de: '||vCodPadres(fila.codpadre));
END IF;
-- dbms_output.put_line('El valor de vCodPadres('||fila.codigo||') es de: '||vCodPadres(fila.codigo)||' El valor de vCodauxPadre antes de asignar es de: '||vCodauxPadre||' El valor de vCodPadres('||fila.codpadre||') es de: '||vCodPadres(fila.codpadre));
dbms_output.put_line('los valores para el capitulo es, vCodigo: '||vCodigo||', descripcion: '||fila.descripcion||', Obra: '||:pnumobr2||', vCodAuxPadre: '||vCodAuxPadre||', comentarios:'||fila.comentarios||','||fila.fecinicial||','||fila.duracion||','||fila.fecrequerida||','||''||','||''||', Tipo: '||:ptipo||', tbunmed_id: '||fila.tbunmed_id||', codext: '||fila.codext||','||fila.cantidad||','||fila.valor);
/*INSERT INTO TDCAPOBRAS(codigo,descripcion,tbobratec_cod,codpadre,comentarios,fecinicial,duracion,fecrequerida,fecinireal,fecfinreal,tipo,tbunmed_id,codext,cantidad,valor)
VALUES (vCodigo,fila.descripcion,:pnumobr2,vCodAuxPadre,fila.comentarios,fila.fecinicial,fila.duracion,fila.fecrequerida,NULL,NULL,:ptipo,fila.tbunmed_id,fila.codext,fila.cantidad,fila.valor);
*/END;
/************************
Inserto los componentes de los capitulos
************************/
--dbms_output.put_line('los valores para el detalle del capitulo son; '||vCodigo||','||fila.descripcion||','||:pnumobr2||','||vCodAuxPadre||','||fila.comentarios||','||fila.fecinicial||','||fila.duracion||','||fila.fecrequerida||','||''||','||''||','||:ptipo||','||fila.tbunmed_id||','||fila.codext||','||fila.cantidad||','||fila.valor);
/*INSERT INTO TDDCAPOBRA(tdsumis_codpro, tdsumis_conster, numlinea, tdcapobra_cod, tbobratec_cod,
porcriesgo, total, precio, tbundmed_id, tbtemp_cod, undconv_id, tdters_nit,
tdters_tid, cantidad, fecha_reser, tbmanobra_codigo)
SELECT tdsumis_codpro, tdsumis_conster, numlinea, vCodigo, :PNUMOBR2,
porcriesgo, total, precio, tbundmed_id, tbptemp_cod,
undconv_id, tdters_nit, tdters_tid, cantidad, NULL, tbmanobra_codigo
FROM TDDCAPCOTI
WHERE tdcapcoti_codcoti = fila.codcoti
AND tdcapcoti_cod=fila.codigo;
*/
vCodigo := vCodigo +1;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
IF cNuevObra%isopen THEN
CLOSE cNuevObra;
END IF;
raise_application_error(-20000,'Error AL COPIAR CAPITULOS: ' || sqlerrm); -- RAISE;
END;-- Pobrcopadicion;

