ORACLE: bloque PL/SQL duplicar aportes estrategicos

DECLARE
    
    --*********************************************************************************
    -- VARIABLES DE PRINCIPALES
    --*********************************************************************************
    -- VARIABLES DEL PLAN DE APORTES DE ORIGEN Y DESTINO
    V_PLAN_APORTE_ORIGEN NUMBER := 867;
    V_PLAN_APORTE_DESTINO NUMBER := 82;
    
    --*********************************************************************************
    -- VARIABLES DE CONTROL
    --*********************************************************************************
    V_INDICE INTEGER := 1;
    
    
    --*********************************************************************************
    -- VARIABLES DE APORTE ESTRATEGICO
    --*********************************************************************************
    --CURSOR A LOS APORTES ESTRATEGICOS DEL PLAN DE ORIGEN  
    CURSOR CURSOR_APORTES_ESTRATEGICOS IS
        SELECT 
            ID_APORTE_ESTRATEGICO,
            PLAN_APORTE_ESTRATEGICO,
            ACCION_ESTRATEGICA,
            CODIGO,
            DESCRIPCION,
            JORNADA,
            PERIODO_ANUAL_INICIAL,
            PERIODO_ANUAL_FINAL,
            CUANTIFICACION,
            LINEA_BASE,
            INTERES_INSTITUCIONAL
        FROM PPI.APORTE_ESTRATEGICO AE
        WHERE PLAN_APORTE_ESTRATEGICO = V_PLAN_APORTE_ORIGEN;    
    
    -- VARIABLES DE APORTES ESTRATEGICOS
    V_ID_APORTE_ESTRATEGICO             PPI.APORTE_ESTRATEGICO.ID_APORTE_ESTRATEGICO%TYPE;
    V_PLAN_APORTE_ESTRATEGICO           PPI.APORTE_ESTRATEGICO.PLAN_APORTE_ESTRATEGICO%TYPE;
    V_ACCION_ESTRATEGICA                PPI.APORTE_ESTRATEGICO.ACCION_ESTRATEGICA%TYPE;
    V_CODIGO                            PPI.APORTE_ESTRATEGICO.CODIGO%TYPE;
    V_DESCRIPCION                       PPI.APORTE_ESTRATEGICO.DESCRIPCION%TYPE;
    V_JORNADA                           PPI.APORTE_ESTRATEGICO.JORNADA%TYPE;
    V_PERIODO_ANUAL_INICIAL             PPI.APORTE_ESTRATEGICO.PERIODO_ANUAL_INICIAL%TYPE;
    V_PERIODO_ANUAL_FINAL               PPI.APORTE_ESTRATEGICO.PERIODO_ANUAL_FINAL%TYPE;
    V_CUANTIFICACION                    PPI.APORTE_ESTRATEGICO.CUANTIFICACION%TYPE;
    V_LINEA_BASE                        PPI.APORTE_ESTRATEGICO.LINEA_BASE%TYPE;
    V_INTERES_INSTITUCIONAL             PPI.APORTE_ESTRATEGICO.INTERES_INSTITUCIONAL%TYPE;

    -- ID DEL NUEVO APORTE ESTRATEGICO
    V_ID_NUEVO_APORTE                   PPI.APORTE_ESTRATEGICO.ID_APORTE_ESTRATEGICO%TYPE;


    --*********************************************************************************
    -- VARIABLES DE APORTE_PAE_DISTRIBUCION
    --*********************************************************************************
    --CURSOR A APORTE_PAE_DISTRIBUCION
    CURSOR CURSOR_APORTE_PAE_DISTRIBUCION IS
        SELECT 
            ID_APORTE_PAE_DISTRIBUCION,
            APORTE_ESTRATEGICO,
            PERIODO_ANUAL,
            DISTRIBUCION_PORCENTUAL
        FROM PPI.APORTE_PAE_DISTRIBUCION APD
        WHERE APORTE_ESTRATEGICO = V_ID_APORTE_ESTRATEGICO;  
        
        
    -- VARIABLES DE APORTE PAE_DISTRIBUCION
    V_ID_APORTE_PAE_DISTRIBUCION        PPI.APORTE_PAE_DISTRIBUCION.ID_APORTE_PAE_DISTRIBUCION%TYPE;
    V_APORTE_ESTRATEGICO                PPI.APORTE_PAE_DISTRIBUCION.APORTE_ESTRATEGICO%TYPE;
    V_PERIODO_ANUAL                     PPI.APORTE_PAE_DISTRIBUCION.PERIODO_ANUAL%TYPE;
    V_DISTRIBUCION_PORCENTUAL           PPI.APORTE_PAE_DISTRIBUCION.DISTRIBUCION_PORCENTUAL%TYPE;
    
    -- ID DEL NUEVO APORTE PAE_DISTRIBUCION
    V_ID_NUEVO_APD                      PPI.APORTE_PAE_DISTRIBUCION.ID_APORTE_PAE_DISTRIBUCION%TYPE;
  
  
    --*********************************************************************************
    -- VARIABLES DE APORTE_PAE_FUENTE_RECURSO
    --*********************************************************************************
    --CURSOR A LOS APORTE_PAE_FUENTE_RECURSO  
    CURSOR CURSOR_APORTE_PAE_FUENTE_RECURSO  IS
        SELECT 
            ID_APORTE_PAE_FUENTE_RECURSO,
            APORTE_ESTRATEGICO,
            FUENTE_RECURSO
        FROM PPI.APORTE_PAE_FUENTE_RECURSO APFR
        WHERE APORTE_ESTRATEGICO = V_ID_APORTE_ESTRATEGICO;  
        
        
    -- VARIABLES DE APORTE_PAE_FUENTE_RECURSO 
    V_ID_APORTE_PAE_FUENTE_RECURSO      PPI.APORTE_PAE_FUENTE_RECURSO.ID_APORTE_PAE_FUENTE_RECURSO%TYPE;
    V_APORTE_ESTRATEGICO_APFR           PPI.APORTE_PAE_FUENTE_RECURSO.APORTE_ESTRATEGICO%TYPE;
    V_FUENTE_RECURSO                    PPI.APORTE_PAE_FUENTE_RECURSO.FUENTE_RECURSO%TYPE;

    
    -- ID DEL NUEVO APORTE PAE_DISTRIBUCION
    V_ID_NUEVO_APFR                      PPI.APORTE_PAE_FUENTE_RECURSO.ID_APORTE_PAE_FUENTE_RECURSO%TYPE;
    
    
BEGIN

   DBMS_OUTPUT.PUT_LINE('*********************************************************');
    DBMS_OUTPUT.PUT_LINE('*********************************************************');
    DBMS_OUTPUT.PUT_LINE('BIENVENIDO:');
    DBMS_OUTPUT.PUT_LINE('*********************************************************');
    DBMS_OUTPUT.PUT_LINE('*********************************************************');
    DBMS_OUTPUT.PUT_LINE('FUNCIÓN: ESTE BLOQUE PL/SQL MIGRA LOS APORTES ESTRATÉGICOS DEL PLAN DE APORTE ORIGEN AL PLAN DESTINO');
    DBMS_OUTPUT.PUT_LINE('---------------------');
    DBMS_OUTPUT.PUT_LINE('| PLANES DE APORTES |');
    DBMS_OUTPUT.PUT_LINE('---------------------');
    DBMS_OUTPUT.PUT_LINE('| ORIGEN | DESTINO  |');
    DBMS_OUTPUT.PUT_LINE('---------------------');
    DBMS_OUTPUT.PUT_LINE('|   ' || V_PLAN_APORTE_ORIGEN || '  |    ' ||V_PLAN_APORTE_DESTINO || '    |');
    DBMS_OUTPUT.PUT_LINE('---------------------');
    
    DBMS_OUTPUT.PUT_LINE('');
    DBMS_OUTPUT.PUT_LINE('');
    DBMS_OUTPUT.PUT_LINE('');
    
    
    DBMS_OUTPUT.PUT_LINE('*********************************************************');
    DBMS_OUTPUT.PUT_LINE('*********************************************************');
    DBMS_OUTPUT.PUT_LINE('APORTES ESTRATEGICOS A DUPLICAR:');
    DBMS_OUTPUT.PUT_LINE('*********************************************************');
    DBMS_OUTPUT.PUT_LINE('*********************************************************');
    DBMS_OUTPUT.PUT_LINE('|INDICE | ID:  |  PAE  | AE  | COD |     DESCRIP      | JORNADA | PAI  | PAF  | CUANTI | LINEA BASE | INTERES |' );
    DBMS_OUTPUT.PUT_LINE('-----------------------------------------------------------------------------------------------------');
    
    --***********************************************************************
    -- BLOQUE DE INFORMACION: APORTES ESTRATEGICOS
    --***********************************************************************
    
    FOR AE IN CURSOR_APORTES_ESTRATEGICOS LOOP
    
        
        -- *****************************************************************
        -- GUARDAR LOS VALORES DEL REGISTRO EN LAS VARIABLES
        -- *****************************************************************
        V_ID_APORTE_ESTRATEGICO             := AE.ID_APORTE_ESTRATEGICO;
        V_PLAN_APORTE_ESTRATEGICO           := AE.PLAN_APORTE_ESTRATEGICO;
        V_ACCION_ESTRATEGICA                := AE.ACCION_ESTRATEGICA;
        V_CODIGO                            := AE.CODIGO;
        V_DESCRIPCION                       := SUBSTR(AE.DESCRIPCION, 1, 15);
        V_JORNADA                           := AE.JORNADA;
        V_PERIODO_ANUAL_INICIAL             := AE.PERIODO_ANUAL_INICIAL;
        V_PERIODO_ANUAL_FINAL               := AE.PERIODO_ANUAL_FINAL;
        V_CUANTIFICACION                    := AE.CUANTIFICACION;
        V_LINEA_BASE                        := AE.LINEA_BASE;
        V_INTERES_INSTITUCIONAL             := AE.INTERES_INSTITUCIONAL;
        
        
        
        DBMS_OUTPUT.PUT_LINE(   '| '|| 
                                V_INDICE                   || ' |  '    || 
                                V_ID_APORTE_ESTRATEGICO    || ' |  '    || 
                                V_PLAN_APORTE_ESTRATEGICO  || '  | '    || 
                                V_ACCION_ESTRATEGICA       || ' | '     ||
                                V_CODIGO                   || '  | '    ||
                                V_DESCRIPCION              || '  |    ' ||
                                V_JORNADA                  || '    | '  ||
                                V_PERIODO_ANUAL_INICIAL    || '  | '    ||
                                V_PERIODO_ANUAL_FINAL      || '  |    ' ||
                                V_CUANTIFICACION           || '   |    ' ||
                                V_LINEA_BASE               || '       |  ' ||
                                V_INTERES_INSTITUCIONAL    || '      |');

        V_INDICE := V_INDICE +1;

    END LOOP;
    
    --REINICIAR INDICE
    V_INDICE :=1 ;
    
    


    FOR AE IN CURSOR_APORTES_ESTRATEGICOS LOOP
    
    
        -- *****************************************************************
        -- GUARDAR LOS VALORES DEL REGISTRO EN LAS VARIABLES
        -- *****************************************************************
        V_ID_APORTE_ESTRATEGICO             := AE.ID_APORTE_ESTRATEGICO;
        V_PLAN_APORTE_ESTRATEGICO           := AE.PLAN_APORTE_ESTRATEGICO;
        V_ACCION_ESTRATEGICA                := AE.ACCION_ESTRATEGICA;
        V_CODIGO                            := AE.CODIGO;
        V_DESCRIPCION                       := AE.DESCRIPCION;
        V_JORNADA                           := AE.JORNADA;
        V_PERIODO_ANUAL_INICIAL             := AE.PERIODO_ANUAL_INICIAL;
        V_PERIODO_ANUAL_FINAL               := AE.PERIODO_ANUAL_FINAL;
        V_CUANTIFICACION                    := AE.CUANTIFICACION;
        V_LINEA_BASE                        := AE.LINEA_BASE;
        V_INTERES_INSTITUCIONAL             := AE.INTERES_INSTITUCIONAL;
    

        DBMS_OUTPUT.PUT_LINE('');
        DBMS_OUTPUT.PUT_LINE('');
        DBMS_OUTPUT.PUT_LINE('****************************************************************************************************************');
        DBMS_OUTPUT.PUT_LINE('****************************************************************************************************************');
        DBMS_OUTPUT.PUT_LINE('                                         APORTE: ' || V_INDICE );
        DBMS_OUTPUT.PUT_LINE('****************************************************************************************************************');
        DBMS_OUTPUT.PUT_LINE('****************************************************************************************************************');
        DBMS_OUTPUT.PUT_LINE('');
    
        DBMS_OUTPUT.PUT_LINE('');
        DBMS_OUTPUT.PUT_LINE('');
        DBMS_OUTPUT.PUT_LINE('++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++');
        DBMS_OUTPUT.PUT_LINE('                                         PASO 1: DUPLICAR EL APORTE ESTRATEGICO' );
        DBMS_OUTPUT.PUT_LINE('++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++');
        DBMS_OUTPUT.PUT_LINE('');
    
    
    
        DBMS_OUTPUT.PUT_LINE('------------------------------------------------------------------------------------------------------------------');
        DBMS_OUTPUT.PUT_LINE('|                                   APORTE ESTRATEGICO A TRABAJAR:  ' || V_ID_APORTE_ESTRATEGICO || '                                          |' );
        DBMS_OUTPUT.PUT_LINE('------------------------------------------------------------------------------------------------------------------');
        DBMS_OUTPUT.PUT_LINE('| ID:  |  PAE  | AE  | COD |     DESCRIP      | JORNADA | PAI  | PAF  | CUANTI | LINEA BASE | INTERES |' );
        DBMS_OUTPUT.PUT_LINE('------------------------------------------------------------------------------------------------------------------');
        DBMS_OUTPUT.PUT_LINE(   '| ' ||
                                V_ID_APORTE_ESTRATEGICO    || '  |  '   || 
                                V_PLAN_APORTE_ESTRATEGICO  || ' | '    || 
                                V_ACCION_ESTRATEGICA       || '  | '     ||
                                V_CODIGO                   || ' | '    ||
                                SUBSTR(AE.DESCRIPCION, 1, 15)             || '  |    ' ||
                                V_JORNADA                  || '    | '  ||
                                V_PERIODO_ANUAL_INICIAL    || '  | '    ||
                                V_PERIODO_ANUAL_FINAL      || '  |    ' ||
                                V_CUANTIFICACION           || '   |    ' ||
                                V_LINEA_BASE               || '       |  ' ||
                                V_INTERES_INSTITUCIONAL    || '      |');
        DBMS_OUTPUT.PUT_LINE('------------------------------------------------------------------------------------------------------------------');
        DBMS_OUTPUT.PUT_LINE('');
        DBMS_OUTPUT.PUT_LINE('');
        DBMS_OUTPUT.PUT_LINE('');
        
       
        
     
        -- *****************************************************************
        -- REALIZAR INSERT DE LOS DATOS
        -- *****************************************************************
        INSERT INTO PPI.APORTE_ESTRATEGICO(
            ID_APORTE_ESTRATEGICO,
            PLAN_APORTE_ESTRATEGICO,
            ACCION_ESTRATEGICA,
            CODIGO,
            DESCRIPCION,
            JORNADA,
            PERIODO_ANUAL_INICIAL,
            PERIODO_ANUAL_FINAL,
            FECHA_CREACION,
            USUARIO_CREACION,
            FECHA_MODIFICACION,
            USUARIO_MODIFICACION,
            CAMPO_CONFIGURABLE,
            VERSION,
            CUANTIFICACION,
            LINEA_BASE,
            INTERES_INSTITUCIONAL)
        VALUES( 
            SQ_APORTE_ESTRATEGICO.NEXTVAL,
            V_PLAN_APORTE_DESTINO,
            V_ACCION_ESTRATEGICA,
            V_CODIGO,
            V_DESCRIPCION,
            V_JORNADA,
            V_PERIODO_ANUAL_INICIAL,
            V_PERIODO_ANUAL_FINAL,
            SYSDATE,
            1,
            SYSDATE,
            1,
            0,
            0,
            V_CUANTIFICACION,
            V_LINEA_BASE,
            V_INTERES_INSTITUCIONAL) RETURNING ID_APORTE_ESTRATEGICO INTO V_ID_NUEVO_APORTE;
            
            
            DBMS_OUTPUT.PUT_LINE('------------------------------------------------------------------------------------------------------------------');
            DBMS_OUTPUT.PUT_LINE('|                                   APORTE ESTRATEGICO DUPLICADO:  ' || V_ID_NUEVO_APORTE || '                                          |' );
            DBMS_OUTPUT.PUT_LINE('------------------------------------------------------------------------------------------------------------------');
            DBMS_OUTPUT.PUT_LINE('| ID:  |  PAE  | AE  | COD |     DESCRIP      | JORNADA | PAI  | PAF  | CUANTI | LINEA BASE | INTERES |' );
            DBMS_OUTPUT.PUT_LINE('------------------------------------------------------------------------------------------------------------------');
            DBMS_OUTPUT.PUT_LINE(   '|' ||
                                    V_ID_NUEVO_APORTE          || '  |  '   || 
                                    V_PLAN_APORTE_DESTINO      || ' | '    || 
                                    V_ACCION_ESTRATEGICA       || '  | '     ||
                                    V_CODIGO                   || ' | '    ||
                                    SUBSTR(AE.DESCRIPCION, 1, 15)             || '  |    ' ||
                                    V_JORNADA                  || '    | '  ||
                                    V_PERIODO_ANUAL_INICIAL    || '  | '    ||
                                    V_PERIODO_ANUAL_FINAL      || '  |    ' ||
                                    V_CUANTIFICACION           || '   |    ' ||
                                    V_LINEA_BASE               || '       |  ' ||
                                    V_INTERES_INSTITUCIONAL    || '      |');
            DBMS_OUTPUT.PUT_LINE('------------------------------------------------------------------------------------------------------------------');
            DBMS_OUTPUT.PUT_LINE('');
            DBMS_OUTPUT.PUT_LINE('');
            
            
            
            
            DBMS_OUTPUT.PUT_LINE('');
            DBMS_OUTPUT.PUT_LINE('');
            DBMS_OUTPUT.PUT_LINE('++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++');
            DBMS_OUTPUT.PUT_LINE('                                         PASO 2: DUPLICAR DISTRIBUCIÓN' );
            DBMS_OUTPUT.PUT_LINE('++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++');
            DBMS_OUTPUT.PUT_LINE('');
        
        
            --***********************************************************************
            -- BLOQUE DE INFORMACION: DISTRIBUCIONES
            --***********************************************************************
            
        
            DBMS_OUTPUT.PUT_LINE('-------------------------------');
            DBMS_OUTPUT.PUT_LINE('| DISTRIBUCIONES A DUPLICAR   |' );
            DBMS_OUTPUT.PUT_LINE('-------------------------------');
            DBMS_OUTPUT.PUT_LINE('| ID:  | AE  |  PA  | DISTRI  |' );
            DBMS_OUTPUT.PUT_LINE('-------------------------------');
            
            
            
            FOR APD IN CURSOR_APORTE_PAE_DISTRIBUCION LOOP
                
                -- *****************************************************************
                -- GUARDAR LOS VALORES DEL REGISTRO EN LAS VARIABLES
                -- *****************************************************************
                V_ID_APORTE_PAE_DISTRIBUCION        := APD.ID_APORTE_PAE_DISTRIBUCION;
                V_APORTE_ESTRATEGICO                := APD.APORTE_ESTRATEGICO;
                V_PERIODO_ANUAL                     := APD.PERIODO_ANUAL;
                V_DISTRIBUCION_PORCENTUAL           := APD.DISTRIBUCION_PORCENTUAL;
                
                
                DBMS_OUTPUT.PUT_LINE('|' ||
                                    V_ID_APORTE_PAE_DISTRIBUCION          || '  |  '   || 
                                    V_APORTE_ESTRATEGICO      || ' | '    || 
                                    V_PERIODO_ANUAL       || '  | '     ||
                                    V_DISTRIBUCION_PORCENTUAL                   || ' | ' );
                
                
            END LOOP;
            
            DBMS_OUTPUT.PUT_LINE('');
            DBMS_OUTPUT.PUT_LINE('');
            
            
            
            
            DBMS_OUTPUT.PUT_LINE('-------------------------------');
            DBMS_OUTPUT.PUT_LINE('| DISTRIBUCIONES A DUPLICADAS |' );
            DBMS_OUTPUT.PUT_LINE('-------------------------------');
            DBMS_OUTPUT.PUT_LINE('| ID:  | AE  |  PA  | DISTRI  |' );
            DBMS_OUTPUT.PUT_LINE('-------------------------------');
            
            FOR APD IN CURSOR_APORTE_PAE_DISTRIBUCION LOOP
                

                -- *****************************************************************
                -- GUARDAR LOS VALORES DEL REGISTRO EN LAS VARIABLES
                -- *****************************************************************
                V_ID_APORTE_PAE_DISTRIBUCION        := APD.ID_APORTE_PAE_DISTRIBUCION;
                V_APORTE_ESTRATEGICO                := APD.APORTE_ESTRATEGICO;
                V_PERIODO_ANUAL                     := APD.PERIODO_ANUAL;
                V_DISTRIBUCION_PORCENTUAL           := APD.DISTRIBUCION_PORCENTUAL;

                -- *****************************************************************
                -- REALIZAR INSERT DE LAS DISTRIBUCIONES
                -- *****************************************************************
                INSERT INTO PPI.APORTE_PAE_DISTRIBUCION(
                    ID_APORTE_PAE_DISTRIBUCION,
                    APORTE_ESTRATEGICO,
                    PERIODO_ANUAL,
                    DISTRIBUCION_PORCENTUAL,
                    FECHA_CREACION,
                    USUARIO_CREACION,
                    FECHA_MODIFICACION,
                    USUARIO_MODIFICACION,
                    CAMPO_CONFIGURABLE,
                    VERSION)
                VALUES( 
                    SQ_APORTE_PAE_DISTRIBUCION.NEXTVAL,
                    V_ID_NUEVO_APORTE,
                    V_PERIODO_ANUAL,
                    V_DISTRIBUCION_PORCENTUAL,
                    SYSDATE,
                    1,
                    SYSDATE,
                    1,
                    0,
                    0) RETURNING ID_APORTE_PAE_DISTRIBUCION INTO V_ID_NUEVO_APD;
               
               
                    DBMS_OUTPUT.PUT_LINE('|' ||
                                    V_ID_NUEVO_APD          || '  |  '   || 
                                    V_ID_NUEVO_APORTE      || ' | '    || 
                                    V_PERIODO_ANUAL       || '  | '     ||
                                    V_DISTRIBUCION_PORCENTUAL                   || ' | ' );
                                    
                
        END LOOP;



        DBMS_OUTPUT.PUT_LINE('');
        DBMS_OUTPUT.PUT_LINE('');
        DBMS_OUTPUT.PUT_LINE('++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++');
        DBMS_OUTPUT.PUT_LINE('                                         PASO 3: DUPLICAR FUENTE DE RECURSO' );
        DBMS_OUTPUT.PUT_LINE('++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++');
        DBMS_OUTPUT.PUT_LINE('');
    
        
        --***********************************************************************
        -- BLOQUE DE INFORMACION: FUENTE DE RECURSO
        --***********************************************************************
            
        
        DBMS_OUTPUT.PUT_LINE('-------------------------------');
        DBMS_OUTPUT.PUT_LINE('| FUENTE RECURSO A DUPLICAR   |' );
        DBMS_OUTPUT.PUT_LINE('-------------------------------');
        DBMS_OUTPUT.PUT_LINE('| ID:  | AE  | FUENTE RECURSO |' );
        DBMS_OUTPUT.PUT_LINE('-------------------------------');
            
            
            
        FOR APFR IN CURSOR_APORTE_PAE_FUENTE_RECURSO LOOP
            
            -- *****************************************************************
            -- GUARDAR LOS VALORES DEL REGISTRO EN LAS VARIABLES
            -- *****************************************************************
            V_ID_APORTE_PAE_FUENTE_RECURSO      := APFR.ID_APORTE_PAE_FUENTE_RECURSO;
            V_APORTE_ESTRATEGICO_APFR           := APFR.APORTE_ESTRATEGICO;
            V_FUENTE_RECURSO                    := APFR.FUENTE_RECURSO;
           
            DBMS_OUTPUT.PUT_LINE('|' ||
                                V_ID_APORTE_PAE_FUENTE_RECURSO          || '  |  '   || 
                                V_APORTE_ESTRATEGICO_APFR      || ' | '    || 
                                V_FUENTE_RECURSO       || '  | ' );
            
            
        END LOOP;
            
            DBMS_OUTPUT.PUT_LINE('');
            DBMS_OUTPUT.PUT_LINE('');
            
            
          
        DBMS_OUTPUT.PUT_LINE('-------------------------------');
        DBMS_OUTPUT.PUT_LINE('| FUENTE RECURSO A DUPLICADOS |' );
        DBMS_OUTPUT.PUT_LINE('-------------------------------');
        DBMS_OUTPUT.PUT_LINE('| ID:  | AE  |  PA  | DISTRI  |' );
        DBMS_OUTPUT.PUT_LINE('-------------------------------');
        
        FOR APFR IN CURSOR_APORTE_PAE_FUENTE_RECURSO LOOP
            

            -- *****************************************************************
            -- GUARDAR LOS VALORES DEL REGISTRO EN LAS VARIABLES
            -- *****************************************************************
            V_ID_APORTE_PAE_FUENTE_RECURSO      := APFR.ID_APORTE_PAE_FUENTE_RECURSO;
            V_APORTE_ESTRATEGICO_APFR           := APFR.APORTE_ESTRATEGICO;
            V_FUENTE_RECURSO                    := APFR.FUENTE_RECURSO;

            -- *****************************************************************
            -- REALIZAR INSERT DE LAS FUENTES DE RECURSOS
            -- *****************************************************************
            INSERT INTO PPI.APORTE_PAE_FUENTE_RECURSO(
                ID_APORTE_PAE_FUENTE_RECURSO,
                APORTE_ESTRATEGICO,
                FUENTE_RECURSO,
                FECHA_CREACION,
                USUARIO_CREACION,
                FECHA_MODIFICACION,
                USUARIO_MODIFICACION,
                CAMPO_CONFIGURABLE,
                VERSION)
            VALUES( 
                SQ_APORTE_PAE_FUENTE_RECURSO.NEXTVAL,
                V_ID_NUEVO_APORTE,
                V_FUENTE_RECURSO,
                SYSDATE,
                1,
                SYSDATE,
                1,
                0,
                0) RETURNING ID_APORTE_PAE_FUENTE_RECURSO INTO V_ID_NUEVO_APFR;
           
           
                DBMS_OUTPUT.PUT_LINE('|' ||
                                V_ID_NUEVO_APFR          || '  |  '   || 
                                V_ID_NUEVO_APORTE      || ' | '    || 
                                V_FUENTE_RECURSO       || '  | ' );
                                
                                
        END LOOP;                  
            
   
        
        
        V_INDICE := V_INDICE +1;        
    END LOOP;
    
    --COMMIT;
    
    --DBMS_OUTPUT.PUT_LINE('Proceso completado.');
    
    EXCEPTION
        WHEN OTHERS THEN
        -- Manejo de errores
        DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
        ROLLBACK;
    
END;
/