create or replace PROCEDURE P_MIGRACION_BANDEJAPAPEL0
AS

CURSOR C_CLAVES_12 IS
	SELECT TRIM(ID_079)  AS ID079
	FROM X87B.X8779T00@X87B_DBL0
	WHERE SITUACION_079 = 'V'
	AND NOT EXISTS ( SELECT VALOR_X87B FROM CLAVES_AD7412 WHERE VALOR_X87B =TRIM(ID_079));

CURSOR cEntradas IS
	SELECT ID_079,NUMANIO_079,FREGISTRO_079,FLECTURA_079,JMSID_079,NUMREG_079,	--MENSAJE_079,
		TIPO_079,SITUACION_079,REMITENTE_079,QRCODE_079,IDSOLICITUD_000, NUMREGAYUNTAMIENTO_079,FECHAREGAYUNTAMIENTO_079,CODDEL_079,PTEACUSE_079,
		IDBENEFICIARIO_009,OBSERVACIONES_079,CODUSUARIO_079,MOTIVOOCULTACION_079, VALOR_AD74A AS ID_ENTRADA_12
	FROM x87b.x8779t00@x87b_dbl0 ENT, CLAVES_AD7412
	WHERE TRIM(ID_079) = VALOR_X87B;

cursor cFich (W_ENTRADA VARCHAR2) is 
    SELECT (select MENSAJE_079 from X87B.X8779T00@X87B_DBL0  WHERE ID_079 = W_ENTRADA) AS fichBlob FROM  dual;

CURSOR cDoc (W_ENTRADA VARCHAR2) is
	SELECT TRIM(OID_080)  AS OID080
	FROM X87B.X8780T00@X87B_DBL0
	WHERE CODSOL_079 = W_ENTRADA;

ID_CLAVE_12 CLAVES_AD7412.VALOR_AD74A%type;
ID_CLAVE_13 NUMBER;
W_EXPEDIENTE NUMBER;

BEGIN

	-- Rellenar las claves
	FOR R_CLAVES IN C_CLAVES_12 LOOP
		SELECT AD74A12T00_SEQ.NEXTVAL INTO ID_CLAVE_12 FROM DUAL;
		BEGIN
			INSERT INTO CLAVES_AD7412  (VALOR_X87B,  VALOR_AD74A, FECHA_MIG)
			VALUES (R_CLAVES.ID079, ID_CLAVE_12, SYSDATE);
			EXCEPTION
			WHEN dup_val_on_index THEN
				null;
        END;
	END LOOP;
	COMMIT;

	-- Recorrer las entradas de papel 0 (tabla 12)
	FOR R IN cEntradas LOOP		
		BEGIN

			-- Obtener el id del expediente
            DBMS_OUTPUT.PUT_LINE('R.IDSOLICITUD_000-->' || R.IDSOLICITUD_000);
            W_EXPEDIENTE := NULL;
            IF R.IDSOLICITUD_000 IS NOT NULL THEN
                BEGIN
                SELECT VALOR_AD74A INTO W_EXPEDIENTE FROM CLAVES_AD7400 WHERE VALOR_X87B = R.IDSOLICITUD_000;
                 EXCEPTION
                WHEN NO_DATA_FOUND THEN
                    W_EXPEDIENTE := NULL;
                END;
            END IF;

			-- Insertar la entrada
			INSERT INTO AD74A12T00 (ID_ENTRADA_12,F_LECTURA_12,IDJMS_12,NUM_REGISTRO_12,F_REGISTRO_12,QRCODE_12,MENSAJE_12,
			ESTADO_12,BLOQUEO_12,TIPO_12,REMITENTE_12,NUM_REG_ORIGINAL_12,F_REG_ORIGINAL_12,USU_RESPONSABLE_12,NUM_EXPEDIENTE_12,
			PROCEDUREID_12,RESUMEN_12,URGENCIA_12,OBSERVACIONES_12,MOTIVO_OCULTAR_12,F_ALTA_12,F_MODIF_12,USU_ALTA_12,USU_MODIF_12,TIPO_PROCESO_12)
			VALUES (R.ID_ENTRADA_12, NULL, R.JMSID_079, R.NUMREG_079, R.FREGISTRO_079, DECODE(R.TIPO_079, 'SOL', '00870#02#01', 'APO', '00870#02#02', 'REQ', '00870#02#04', '00870#02#01'), NULL,
			'P', 0, DECODE(R.TIPO_079, 'SOL', '01', 'APO', '02', 'REQ', '04', '01'), R.REMITENTE_079, R.NUMREGAYUNTAMIENTO_079, R.FECHAREGAYUNTAMIENTO_079, R.CODUSUARIO_079, W_EXPEDIENTE,
			'0087002', R.OBSERVACIONES_079, 0, R.OBSERVACIONES_079, R.MOTIVOOCULTACION_079, SYSDATE, NULL, 'MIGRADO', NULL, NULL);

			-- Actualizar el mensaje que es CLOB
			for rFich in cFich (R.ID_079) loop
				UPDATE AD74A12T00 SET MENSAJE_12 = rFich.fichBlob where ID_ENTRADA_12 = R.ID_ENTRADA_12;
			end loop;

			-- Recorrer e insertar los documentos (tabla 13)
			FOR rDoc IN cDoc(R.ID_079) LOOP
				SELECT AD74A13T00_SEQ.NEXTVAL INTO ID_CLAVE_13 FROM DUAL;

				INSERT INTO AD74A13T00(ID_DOC_PAPEL0_13,ID_ENTRADA_13,OID_DOCUMENTO_13,NOMBRE_DOC_13,EXTENSION_13,
				ID_TIPO_DOC_13,ID_EXPEDIENTE_13,F_ALTA_13,F_MODIF_13,USU_ALTA_13,USU_MODIF_13) 
				VALUES (ID_CLAVE_13, R.ID_ENTRADA_12, rDoc.OID080, NULL, NULL,
				NULL, W_EXPEDIENTE, SYSDATE, NULL, 'MIGRADO', NULL);
			END LOOP;
			
			--Actualizar la entrada en X87 a ocuta con el comentario 'MIGRADO X87B'
			UPDATE x87b.x8779t00@x87b_dbl0 SET SITUACION_079 = 'O', MOTIVOOCULTACION_079 = 'MIGRADO X87B' WHERE ID_079 = R.ID_079;
        END;
	END LOOP;	
	COMMIT;

END P_MIGRACION_BANDEJAPAPEL0;
/