--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;