Documente Academic
Documente Profesional
Documente Cultură
La base de datos almacena en varias tablas información relacionada con obligaciones crediticias
(Créditos).
La información básica de cada crédito se almacena en la tabla CREDITOS.
Cada crédito tiene un estado: Cancelado (C) o Activo (A).
Las otras tablas tienen información operativa del crédito que va siendo creada o actualizada
durante la vida del crédito, asociada siempre a una fecha de registro de la información. Esta
información operativa puede ser:
o Diaria: La correspondiente a saldos y transacciones de los créditos (Tablas
SALDOS_SISTEMA_CARTERA y TRANSACCIONES_INTERNAS)
o Eventual: Correspondiente a eventos no periódicos que les suceden a los créditos.
(Tablas PAGOS y APLICACIONES_PAGOS)
El proceso que se necesita implementar debe tomar la información completa de cada crédito (básica
y operativa) y copiarla y/o moverla hacia un conjunto de tablas espejo ubicadas sobre la misma base
de datos. Cuando se copia o cuando se mueve la información depende del estado de cada crédito:
1. La información de los créditos cancelados debe ser trasladada completamente hacia las tablas
históricas. Es decir, se debe copiar a las tablas históricas y eliminar de las tablas básicas y
operativas.
2. La información de los créditos activos debe ser:
a. La básica debe copiada a las tablas históricas
b. La eventual copiada a las tablas históricas
c. La diaria copiada a las tablas históricas y eliminada de las tablas operativas la que sea
anterior a 90 días respecto a la fecha de ejecución del proceso.
La depuración de cada crédito debe ser considerada una transacción. Es decir, el proceso debe ser
completo para cada crédito y un error en la depuración de un crédito no debe detener el proceso
completo. Se debe dejar log de los errores del proceso para poder hacer una revisión al final del
mismo.
Por cada crédito se debe dejar registro de la fecha en que se ejecutó el proceso de depuración.
1 1 1
SALDOS_SISTEMA_CARTERA
PAGOS Numero_credito
Numero_credito Estado
n
Fecha_pago n Fecha
1
1
n
n
APLICACIONES_PAGOS TRANSACCIONES_INTERNAS
Numero_credito
Numero_credito
Fecha
Fecha_pago
CALIFICACIONES
Numero_credito
Fecha
Resuelva:
1. Diseñe las tablas históricas (y las relaciones entre ellas) que considere necesarias para la
implementación del proceso.
2. Especifique las etapas que debe contemplar el proceso de depuración de información.
3. Escriba los algoritmos necesarios para la implementación de cada una de las etapas del proceso.
1 1 1
SALDOS_SISTEMA_CARTERA
PAGOS Numero_credito
Numero_credito Estado
n
Fecha_pago n Fecha
1
1
n
n
APLICACIONES_PAGOS TRANSACCIONES_INTERNAS
Numero_credito
Numero_credito
Fecha
Fecha_pago
1
1
n n n
n
HISTORIAL_EVENTUAL HISTORIAL_ DIARIO
Numero_credito CALIFICACIONES Numero_credito
Fecha_pago Numero_credito Fecha
Fecha Estado
Para el punto 2 se deben considerar créditos activos y los créditos cancelados por separado para los
diferentes procesos que se requieren según el enunciado.
commit;
end loop;
utl_file.fclose(v_archivo);
exception when others then
utl_file.put_line (v_archivo,'GENERAL '||sqlERRM);
rollback;
utl_file.fclose(v_archivo);
end;
--CREDITOS ACTIVOS
procedure pr_debug_activos IS
cursor c is
SELECT A.*,B.*, C.* FROM
CREDITOS A,PAGOS B, APLICACIONES_PAGOS C
WHERE A.NUMERO_CREDITO=B.NUMERO_CREDITO
AND B.NUMERO_CREDITO=C.NUMERO_CREDITO
and a.estado='A';
cursor c2 is
SELECT A.*,B.*, C.* FROM
CREDITOS A,SALDOS_SISTEMAS_CARTERA B,TRANSACCIONES_INTERNAS C
WHERE A.NUMERO_CREDITO=B.NUMERO_CREDITO
AND A.NUMERO_CREDITO=C.NUMERO_CREDITO
is
begin
--ARCHIVO LOG ERRORES
v_archivo := utl_file.fopen ('DIR_TMP',
'LOG_DEBUG_CREDITOS_C.txt', 'w');
--EVENTUAL
for i in c loop
BEGIN
insert into HISTORIAL_EVENTUAL values
SELECT A.*,B.*, C.* FROM
CREDITOS A,PAGOS B, APLICACIONES_PAGOS C
WHERE A.NUMERO_CREDITO=B.NUMERO_CREDITO
AND B.NUMERO_CREDITO=C.NUMERO_CREDITO
and a.credito=i.credito;
commit;
EXCEPTION
WHEN OTHERS THEN
--LOG
utl_file.put_line (v_archivo, 'EVENTUAL ' ||I.NUMERO_CREDITO||
' '||SQLERRM);
ROLLBACK;
END;
end loop;
--DIARIO
for K in c2 loop
BEGIN
insert into HISTORIAL_DIARIO VALUES
SELECT A.*,B.*, C.* FROM
CREDITOS A,SALDOS_SISTEMAS_CARTERA B,TRANSACCIONES_INTERNAS C
WHERE A.NUMERO_CREDITO=B.NUMERO_CREDITO
AND A.NUMERO_CREDITO=C.NUMERO_CREDITO
and a.credito=K.credito;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
--LOG
utl_file.put_line (v_archivo, 'DIARIO '||K.NUMERO_CREDITO|| '
'||SQLERRM);
ROLLBACK;
END;
utl_file.fclose(v_archivo);
exception when others then
utl_file.put_line (v_archivo,'GENERAL '||sqlERRM);
COMMIT;
utl_file.fclose(v_archivo);
rollback;
end;