create or replace PROCEDURE P_MIGRACION_CINCO AS 

-- CONSTANTES 
C_TABLA_X87_04 VARCHAR2(10):= 'X8704T00';
C_TABLA_AD74A_03 VARCHAR2(10):= 'AD74A03T00';

  /********************************
  CURSOR PARA PERSONAS DE CONTACTO
  AD74A03T00
  *********************************/
  CURSOR CON
  IS
 
    
   SELECT IDCONTACTO_004 ,
          IDCONTACTO_035,
      DECODE(PERSFISICA_004, 1,0,1) AS TIPO_CONTACTO_03,
      TIPOIDENTIFICADOR_004         AS TIPO_IDENTIFICADOR_03 ,
      IDENTIFICADOR_004             AS IDENTIFICADOR_03,
      NOMBRE_004                    AS NOMBRE_03,
      APELLIDO1_004                 AS APELLIDO1_03,
      APELLIDO2_004                 AS APELLIDO2_03,
      DECODE(SEXO_004 ,'V','H',SEXO_004)  AS SEXO_03,
      CASE
        WHEN DECODE(PERSFISICA_004, 1,0,1)=0
        THEN APELLIDO1_004
      END                AS RAZON_SOCIAL_03,
      CONINSTALACION_004 AS CONTACTO_INST_03 ,
      PARENTESCO_004     AS PARENTESCO_03,
      COPIALLAVES_004    AS POSEE_LLAVES_03,
      IDSOLICITANTE_001,
      ORDEN_004 AS ORDEN_03
    FROM X87B.X8704T00@X87B_DBL0
   -- WHERE ORDEN_004 NOT IN(3,1,2,4); --PRIMERA CARGA
    --WHERE ORDEN_004=4; --SEGUNDA CARGA
     -- WHERE ORDEN_004=3; --TERCERA CARGA
       -- WHERE ORDEN_004=2; --CUARTA CARGA
       WHERE ORDEN_004=1; --CUARTA CARGA
    

  
  W_ID_CONTACTO_03_CLAVE  NUMBER;
  W_IDSOLICITANTE_CLAVE03 NUMBER;
  W_TELEFCASA_035         VARCHAR2(20 BYTE);
  W_TELEFTRABAJO_035      VARCHAR2(20 BYTE);
  W_TELEF_035             VARCHAR2(20 BYTE);
  W_IDSOLICITUD_000       VARCHAR(100 BYTE);
  W_ID_EXPEDIENTE_03      NUMBER:=NULL;
  W_HAY_EXP               NUMBER:=0;
  
  
  
  /********************************
  CURSOR PARA IPREM
      AD74A79T00
  *********************************/
  CURSOR IPREM
  IS 
SELECT  ANIO_044 AS ANIO_79,
        IPREM_044 AS IPREM_79
FROM X87B.X8744T00@X87B_DBL0;


W_ID_IPREM_79  NUMBER;




BEGIN


  /***************************
  CARGA PARA CONTACTOS
  ***************************/
  
  FOR R IN CON
  LOOP --loop para contactos
    SELECT AD74A03T00_SEQ.NEXTVAL INTO W_ID_CONTACTO_03_CLAVE FROM DUAL;
    BEGIN
      INSERT
      INTO T_CLAVESX87B_AD74A
        (
          TABLA_X87B ,
          NOMBRE_COLUM_X87B,
          VALOR_COLUM_X87B,
          TABLA_AD74A,
          NOMBRE_COLUM_AD7A4,
          VALOR_COLUM_AD74A
        )
        VALUES
        (
          C_TABLA_X87_04,
          'IDCONTACTO_004',
          R.IDCONTACTO_004,
          C_TABLA_AD74A_03,
          'ID_CONTACTO_03',
          W_ID_CONTACTO_03_CLAVE
        );
    EXCEPTION
    WHEN dup_val_on_index THEN
      NULL;
    END;
    
    
    ---hallo el solicitante
    
    begin
    SELECT VALOR_COLUM_AD74A
    INTO W_IDSOLICITANTE_CLAVE03  ----ID_SOLICITante bueno
    FROM T_CLAVESX87B_AD74A
    WHERE NOMBRE_COLUM_X87B='IDSOLICITANTE_001'
    AND VALOR_COLUM_X87B   =R.IDSOLICITANTE_001;
    EXCEPTION
      WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('Error al extraer el solicitante '||R.IDSOLICITANTE_001||' '||SQLERRM);
    END;
    
    
    BEGIN
      SELECT DA.TELEFCASA_035,
             DA.TELEFTRABAJO_035,
             DA.TELEF_035
      INTO W_TELEFCASA_035 ,
           W_TELEFTRABAJO_035 ,
           W_TELEF_035
      FROM X87B.X8735T00@X87B_DBL0 DA
       WHERE DA.IDCONTACTO_035 =R.IDCONTACTO_035 ;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
      W_TELEFCASA_035   :=NULL;
      W_TELEFTRABAJO_035:=NULL;
      W_TELEF_035       :=NULL;
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('Error al extraer LOS tlfnos. de la X35'||R.IDCONTACTO_035||' '||SQLERRM);
    END;
    
    
    BEGIN
      INSERT
      INTO AD74A.AD74A03T00
        (
          ID_CONTACTO_03 ,
          TIPO_CONTACTO_03 ,
          TIPO_IDENTIFICADOR_03 ,
          IDENTIFICADOR_03 ,
          NOMBRE_03 ,
          APELLIDO1_03 ,
          APELLIDO2_03 ,
          SEXO_03 ,
          RAZON_SOCIAL_03 ,
          CONTACTO_INST_03 ,
          PARENTESCO_03 ,
          POSEE_LLAVES_03 ,
          ID_SOLICITANTE_03 ,
          TLFNO_03 ,
          TLFNO2_03 ,
          TLFNO3_03 ,
          ORDEN_03 ,
          USU_HISTORICO_03 ,
          F_HISTORICO_03 ,
          F_ALTA_03 ,
          USU_ALTA_03 ,
          ID_EXPEDIENTE_03
        )
        VALUES
        (
          W_ID_CONTACTO_03_CLAVE ,
          R.TIPO_CONTACTO_03 ,
          R.TIPO_IDENTIFICADOR_03 ,
          R.IDENTIFICADOR_03 ,
          R.NOMBRE_03 ,
          R.APELLIDO1_03 ,
          R.APELLIDO2_03 ,
          R.SEXO_03 ,
          R.RAZON_SOCIAL_03 ,
          R.CONTACTO_INST_03 ,
          R.PARENTESCO_03 ,
          R.POSEE_LLAVES_03 ,
          W_IDSOLICITANTE_CLAVE03 ,
          W_TELEFCASA_035 ,
          W_TELEFTRABAJO_035 ,
          W_TELEF_035,
          R.ORDEN_03 ,
          NULL,
          NULL ,
          SYSDATE ,
          'MIGRADO' ,
          NULL --FK a la tabla 00 de EXPEDIENTES (Indica que el contacto es de la solicitud)
        );
    EXCEPTION
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('CARGA AD74A03T00.  '||R.IDCONTACTO_004||' '||SQLCODE||SQLERRM);
      END;
  END LOOP; ---FIN LOOP contactos
  COMMIT;
 
  /***************************
     CARGA PARA IPREM
      AD74A79T00
  ***************************/
/*
 FOR R IN IPREM
  LOOP --loop para contactos
    
SELECT AD74A79T00_SEQ.NEXTVAL INTO W_ID_IPREM_79 FROM DUAL;
    BEGIN
      
      INSERT
      INTO AD74A.AD74A79T00
        (
          ID_IPREM_79,
          IPREM_79,
          ANIO_79,
          F_ALTA_79,
          USU_ALTA_79,
          F_MODIF_79,
          USU_MODIF_79
        )
        VALUES
        (
          W_ID_IPREM_79,
          R.IPREM_79,
          R.ANIO_79,
          SYSDATE,
          'MIGRADO',
          NULL,
          NULL
        );
    EXCEPTION
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('CARGA AD74A79T00. IPREM '||R.ANIO_79||' '||R.IPREM_79||' '||W_ID_IPREM_79||SQLCODE||SQLERRM);
    END;
    

  END LOOP; --FIN LOOP IPREM
  COMMIT;
*/

END P_MIGRACION_CINCO;
/