como puedo manejar loops anidados en plsql, solo me realiza una vez el loop interno y luego de que este termina, termina el externo igual y no realiza todo lo que se tiene que hacer ... = ( ayudenme este es el codigo
PROCEDURE SEIS IS
CURSOR C_DATOS IS
select * from
(SELECT AA.SRI_EMPRESA,AA.SRI_AUTORIZACION,CC.SRI_T_TPDCODIGO,DECODE (CC.SRI_T_TPDCODIGO,27,1,127,2,9,4,8,5,34,6,2,7) as numero,
DD.TPD_ID,DD.TPD_NOMBRE,BB.SRI_DAUT_ALMACEN, EE.ALM_ID,EE.ALM_NOMBRE ,
BB.SRI_DAUT_PV, FF.PVE_ID, FF.PVE_NOMBRE
FROM DATA_USR.SRI_MAN_AUTORIZACION AA, DATA_USR.SRI_MAN_AUT_ALM_PV BB, DATA_USR.SRI_MAN_TIPODOC CC, DATA_USR.TIPODOC DD,
DATA_USR.ALMACEN EE, DATA_USR.PUNTOVENTA FF
WHERE AA.SRI_EMPRESA = BB.SRI_DAUT_EMPRESA AND AA.SRI_AUTORIZACION = BB.SRI_DAUT_AUTORIZACION
AND AA.SRI_EMPRESA = CC.SRI_T_EMPRESA
AND CC.SRI_T_TPDCODIGO = DD.TPD_CODIGO
AND EE.ALM_EMPRESA = BB.SRI_DAUT_EMPRESA AND EE.ALM_CODIGO = BB.SRI_DAUT_ALMACEN
AND FF.PVE_EMPRESA = BB.SRI_DAUT_EMPRESA AND FF.PVE_ALMACEN = BB.SRI_DAUT_ALMACEN AND FF.PVE_SECUENCIA = BB.SRI_DAUT_PV
AND AA.SRI_EMPRESA = :PARAMETER.PA_EMPRESA2
AND EE.ALM_CODIGO = :PARAMETER.PA_ALMACEN
AND FF.PVE_SECUENCIA = :PARAMETER.PA_PV
AND DD.TPD_CODIGO = :PARAMETER.PA_TIPODOC) xx
ORDER BY xx.SRI_EMPRESA,xx.SRI_AUTORIZACION, xx.numero, xx.ALM_ID, xx.PVE_ID;
NUM_CCO_NUMERO NUMBER(10);
NUM_CONTADOR NUMBER(10);
BEGIN
--ELIMINO DATOS DE LA TABLE REP_SRI_AUTOIMPRESORES
delete from data_usr.rep_sri_autoimpresores;
-- Baja el nivel de mensaje de Forms
:System.Message_Level := 5;
-- Graba registro actual
COMMIT;
-- Restaura el nivel de mensaje de Forms
:System.Message_Level := 0;
GO_BLOCK(f_global.g_bloque);
FIRST_RECORD;
LOOP
IF NAME_IN(f_global.g_bloque||'.DSP_MARCADO' ) = 1 then
GO_BLOCK(f_global.g_bloque_D);
FIRST_RECORD;
LOOP
IF NAME_IN(f_global.g_bloque_D||'.DSP_MARCADO1' ) = 1 then
:PARAMETER.PA_ALMACEN := NAME_IN(f_global.g_bloque||'.ALM_CODIGO');
:PARAMETER.PA_PV := NAME_IN(f_global.g_bloque||'.PV_CODIGO');
:PARAMETER.PA_TIPODOC := NAME_IN(f_global.g_bloque_D||'.TDO_CODIGO');
IF NAME_IN('BUSQUEDA.DSP_EMPRESA_ID') IS NOT NULL AND NAME_IN('BUSQUEDA.DSP_FECHA') IS NOT NULL THEN
FOR I IN C_DATOS LOOP
NUM_CCO_NUMERO := DATA_USR.CCO_INICIO(:PARAMETER.PA_EMPRESA2,I.SRI_DAUT_ALMACEN,I.SRI_DAUT_PV,I.SRI_T_TPDCODIGO,:PARAMETER.PA_FECHA,:PARAMETER.PA_FECHA_V);
IF NUM_CCO_NUMERO <> -2 THEN
IF NUM_CCO_NUMERO = - 1 THEN
INSERT INTO DATA_USR.Rep_Sri_Autoimpresores A
(A.SRI_RUC,A.SRI_AUTORIZACION_A,A.SRI_AUTORIZACION_N,A.SRI_TIPO_TRAMITE,A.SRI_FECHA_REPORTE,A.SRI_COD_TIP_DOC,
A.SRI_COD_ESTABLECIMIENTO,A.SRI_COD_PUN_EMISION,A.SRI_SEQ_A,A.SRI_SEQ_N)
VALUES (:PARAMETER.PA_RUC,NULL,:PARAMETER.PA_AUTN,6,:PARAMETER.PA_FECHA_REPORTE,I.NUMERO,
I.ALM_ID,I.PVE_ID,NULL,0);
-- Baja el nivel de mensaje de Forms
:System.Message_Level := 5;
-- Graba registro actual
COMMIT;
-- Restaura el nivel de mensaje de Forms
:System.Message_Level := 0;
ELSE
INSERT INTO DATA_USR.Rep_Sri_Autoimpresores A
(A.SRI_RUC,A.SRI_AUTORIZACION_A,A.SRI_AUTORIZACION_N,A.SRI_TIPO_TRAMITE,A.SRI_FECHA_REPORTE,A.SRI_COD_TIP_DOC,
A.SRI_COD_ESTABLECIMIENTO,A.SRI_COD_PUN_EMISION,A.SRI_SEQ_A,A.SRI_SEQ_N)
VALUES (:PARAMETER.PA_RUC,NULL,:PARAMETER.PA_AUTN,6,:PARAMETER.PA_FECHA_REPORTE,I.NUMERO,
I.ALM_ID,I.PVE_ID,NULL,NUM_CCO_NUMERO);
-- Baja el nivel de mensaje de Forms
:System.Message_Level := 5;
-- Graba registro actual
COMMIT;
-- Restaura el nivel de mensaje de Forms
:System.Message_Level := 0;
END IF;
ELSE
f_alert.mostrar_error('','LA FUNCION CCO_INICIO ARROJO ERRORES', f_global.g_error);
END IF;
END LOOP;
END IF;
END IF;
EXIT WHEN :SYSTEM.LAST_RECORD = 'TRUE';
IF :SYSTEM.LAST_RECORD != 'TRUE' THEN
NEXT_RECORD;
END IF;
END LOOP;
END IF;
EXIT WHEN :SYSTEM.LAST_RECORD = 'TRUE';
IF :SYSTEM.LAST_RECORD != 'TRUE' THEN
NEXT_RECORD;
END IF;
END LOOP;
END;