Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/03/2009, 13:26
scooby151
 
Fecha de Ingreso: enero-2007
Ubicación: Cali - Valle
Mensajes: 135
Antigüedad: 17 años, 3 meses
Puntos: 4
Problema con procedimiento

Hola, muy buen dia a todos...


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;