Vous êtes sur la page 1sur 4

Examen 2 Evaluacin Bases de Datos. I.E.S. Francisco Ayala Dpto.

Informtica

2 D.A.I. Turno Tarde

Una fbrica de juguetes nos encarga el anlisis, diseo, desarrollo y puesta en funcionamiento de un ERP que se encargue de todo el proceso de gestin de Cobros. Despus de analizar el proceso de cobros, generamos un esquema con las siguientes tablas y restricciones de integridad:
CONNECT system/manager; CREATE TABLESPACE ts_ERPCOBROS DATAFILE 'C:\df_ERPCOBROS' SIZE 10 M; COMMIT; CREATE USER ERPCOBROS IDENTIFIED BY ERPCOBROS DEFAULT TABLESPACE ts_ERPCOBROS; COMMIT; GRANT CONNECT, RESOURCE TO ERPCOBROS; COMMIT; DISCONNECT; CONNECT ERPCOBROS / ERPCOBROS; CREATE TABLE ERPCOBROS.FPAGOS ( cCodFPago VARCHAR2(13) NOT NULL, Descripcion VARCHAR2(100) NOT NULL, NRecibos NUMBER(2) DEFAULT 0 NOT NULL, CONSTRAINT PK_FPAGOS PRIMARY KEY (cCodFPago) ); CREATE TABLE ERPCOBROS.BANCOS ( cCodBanco VARCHAR2(4) NOT NULL, Nombre VARCHAR2(100) NOT NULL, cCodBancoAlt VARCHAR2(20), CONSTRAINT PK_BANCOS PRIMARY KEY (cCodBanco) ); CREATE TABLE ERPCOBROS.CLIENTES ( cCodCliente VARCHAR2(13) NOT NULL, Nombre VARCHAR2(100) NOT NULL, Direccion VARCHAR2(100), Poblacion VARCHAR2(100), CodPostal VARCHAR2(10), Provincia VARCHAR2(50), Pais VARCHAR2(50), FecAlta DATE DEFAULT SYSDATE, cCodFPago VARCHAR2(13) NOT NULL, Dia1Pago NUMBER(2) DEFAULT 0, Dia2Pago NUMBER(2) DEFAULT 0, Dia3Pago NUMBER(2) DEFAULT 0, NoPagoDesde DATE, NoPagoHasta DATE, IdCuenta NUMBER(10) DEFAULT 0 NOT NULL, CONSTRAINT PK_CLIENTES PRIMARY KEY (cCodCliente ) ); CREATE TABLE ERPCOBROS.CLIENTES_CUENTAS ( IdCuenta NUMBER(10) NOT NULL, cCodCliente VARCHAR2(13) NOT NULL, cCodBanco VARCHAR2(4) NOT NULL, Sucursal VARCHAR2(4) NOT NULL, CodControl VARCHAR2(2) NOT NULL, NumCuenta VARCHAR2(10) NOT NULL, Cod_Altern VARCHAR2(20) NOT NULL, Direccion VARCHAR2(100), Poblacion VARCHAR2(100), CodPostal VARCHAR2(10) NOT NULL, Provincia VARCHAR2(50), Pais VARCHAR2(50), CONSTRAINT PK_CLIENTES_CTAS PRIMARY KEY (cCodCliente,cCodBanco,Sucursal,CodControl,NumCuenta) );

Examen 2 Evaluacin Bases de Datos. I.E.S. Francisco Ayala Dpto. Informtica

2 D.A.I. Turno Tarde

ALTER TABLE ERPCOBROS.CLIENTES_CUENTAS ADD CONSTRAINT FK_CLIENTES_CUENTAS_BANCOS FOREIGN KEY (CCODBANCO) REFERENCES ERPCOBROS.BANCOS (CCODBANCO); CREATE TABLE ERPCOBROS.FACTURAS ( Abono VARCHAR2(1) DEFAULT 'N' NOT NULL, nFactura NUMBER(10) NOT NULL, Fecha DATE DEFAULT SYSDATE NOT NULL, cCodCliente VARCHAR2(13) NOT NULL, cCodFPago VARCHAR2(13) NOT NULL, Importe NUMBER(14,4) DEFAULT 0 NOT NULL, Pagada VARCHAR2(1) DEFAULT 'N' NOT NULL, CONSTRAINT PK_FACTURAS PRIMARY KEY (nFactura) ); ALTER TABLE ERPCOBROS.FACTURAS ADD CONSTRAINT FK_FACTURAS_CLIENTES FOREIGN KEY (CCODCLIENTE) REFERENCES ERPCOBROS.CLIENTES (CCODCLIENTE); ALTER TABLE ERPCOBROS.FACTURAS ADD CONSTRAINT FK_FACTURAS_FPAGOS FOREIGN KEY (CCODFPAGO) REFERENCES ERPCOBROS.FPAGOS (CCODFPAGO); ALTER TABLE ERPCOBROS.FACTURAS ADD CONSTRAINT CK_FACTURAS_ABONO CHECK (Abono IN ('N','S')); ALTER TABLE ERPCOBROS.FACTURAS ADD CONSTRAINT CK_FACTURAS_PAGADA CHECK (Pagada IN ('N','S')); CREATE TABLE ERPCOBROS.RECIBOS ( nFactura NUMBER(10) NOT NULL, nRecibo NUMBER(10) NOT NULL, FechaEmis DATE NOT NULL, FechaPago DATE NOT NULL, Importe NUMBER(14,4) DEFAULT 0 NOT NULL, Pagado VARCHAR2(1) NOT NULL, cCodCliente VARCHAR2(13) NOT NULL, cCodBanco VARCHAR2(4) NOT NULL, Sucursal VARCHAR2(4) NOT NULL, CodControl VARCHAR2(2) NOT NULL, NumCuenta VARCHAR2(10) NOT NULL, CONSTRAINT PK_RECIBOS PRIMARY KEY (nFactura,nRecibo) ); ALTER TABLE ERPCOBROS.RECIBOS ADD CONSTRAINT CK_RECIBOS_PAGADO CHECK (Pagado IN ('N','S')); INSERT INTO ERPCOBROS.FPAGOS VALUES ('0000','PAGO AL CONTADO',0); INSERT INTO ERPCOBROS.FPAGOS VALUES ('R003','3 RECIBOS',3); INSERT INTO ERPCOBROS.FPAGOS VALUES ('R012','12 RECIBOS',12); COMMIT; INSERT INTO ERPCOBROS.BANCOS VALUES ('CG','CAJA GRANADA',''); INSERT INTO ERPCOBROS.BANCOS VALUES ('BS','BANCO SANTANDER',''); INSERT INTO ERPCOBROS.BANCOS VALUES ('CR','CAJA RURAL',''); COMMIT; INSERT INTO ERPCOBROS.CLIENTES (cCodCliente,Nombre,cCodFPago,IdCuenta) VALUES ('C001','CLIENTE CONTADO','0000',0); INSERT INTO ERPCOBROS.CLIENTES (cCodCliente,Nombre,cCodFPago,IdCuenta) VALUES ('C002','JUAN SANCHEZ ','0000',0); COMMIT; INSERT INTO ERPCOBROS.CLIENTES_CUENTAS(IdCuenta,cCodCliente,cCodBanco,Sucursal,CodControl, NumCuenta, Cod_Altern,CodPostal) VALUES(1,'C002','CG','S111','11','C/C 11111','UNO',18001); INSERT INTO ERPCOBROS.CLIENTES_CUENTAS(IdCuenta,cCodCliente,cCodBanco,Sucursal,CodControl,NumCuenta, Cod_Altern,CodPostal) VALUES(2,'C002','BS','S222','22','C/C 22222','DOS',19002); INSERT INTO ERPCOBROS.CLIENTES_CUENTAS(IdCuenta,cCodCliente,cCodBanco,Sucursal,CodControl, NumCuenta,Cod_Altern,CodPostal) VALUES(3,'C002','CR','S333','33','C/C 33333','TRES',20003); COMMIT;

Examen 2 Evaluacin Bases de Datos. I.E.S. Francisco Ayala Dpto. Informtica


Sobre las tablas anteriores, realizar: 1. Trigger para Alta de Facturas. ( 4 Puntos ) Teniendo en cuenta que se debe controlar: a. El importe ha de ser siempre superior a 0. b. Si la Factura es un Abono no se genera ningn recibo.

2 D.A.I. Turno Tarde

c. Si la Forma de Pago es PAGO AL CONTADO ( como descripcin ) o el cdigo del cliente es C001, la factura tiene que estar pagada y se generar un solo recibo que haga referencia a la factura (campo nFactura), numerado como 1 (campo nRecibo), que tambin se da como pagado, con fecha de emisin y fecha de pago la fecha de la factura, con el mismo importe y cliente que la factura y con datos bancarios vacos. d. En cualquier otra forma de pago, la factura debe estar no pagada y se generarn tantos recibos mensuales consecutivos como indique la forma de pago, todos ellos no pagados. Cada uno de ellos har referencia a la factura que los gener (campo nFactura) y tendr el mismo cliente que la factura y con datos bancarios que tenga el cliente asociados a su ficha mediante el campo IdCuenta. En caso de que el numero de recibos ( n ) sea superior a 1, cada uno de ellos tendr en el campo nRecibo un nmero entero positivo empezando por 1 para el primer recibo, 2 para el segundo recibo, y as sucesivamente. El importe de cada uno de los n-1 primeros recibos ser el resultado de: ( Total_Factura / n ) redondeado a 2 decimales y el importe del ltimo recibo ser: Total_Factura (Suma importes de los n-1 primeros recibos) e. La Fecha de Emisin de cada recibo coincidir con la fecha de la factura. f. La Fecha de Pago de cada recibo se calcular mediante la siguiente frmula: Fecha de la factura incrementada en nRecibo meses y redondeada al ltimo da del mes. g. Los errores producidos en los apartados a, b o c ha de ser tratado en el bloque de excepciones. 2. Trigger para Modificacin de Recibos. ( 3 Puntos ) Teniendo en cuenta que se debe controlar: a. Si un recibo est pagado o la factura que gener el recibo est pagada o la factura que gener el recibo tiene como forma de pago PAGO AL CONTADO, este no se puede modificar. b. Si se modifican los datos bancarios, hay que controlar que pertenezcan al cliente sobre el cual se emiti el recibo. c. La Fecha de Pago debe ser siempre superior a la Fecha de Emisin. d. Si se cambia el importe, el nuevo importe debe ser, como mximo, un 10% ms alto que el anterior. e. No se puede modificar ninguno de los campos que formen parte de la clave primaria. e. Cualquier error de los anteriores ha de ser tratado en el bloque de excepciones.

Examen 2 Evaluacin Bases de Datos. I.E.S. Francisco Ayala Dpto. Informtica


3.

2 D.A.I. Turno Tarde

Procedimiento almacenado que nos liste las facturas de un cliente y que nos devuelva como parmetros de salida la suma de los importes de recibos no pagados y la suma de los importe pagados. (4 puntos) Para dicho procedimiento tener en cuenta que: a. El nombre del procedimiento ser sp_Lis_FacxCli y el de los parmetros xCodCli, xSumRecNoPag y xSumRecPag. b. Se ha de utilizar al menos dos cursores, uno de ellos parametrizado. c. El listado ha de tener el siguiente formato y condiciones: Cliente : cCodCliente Direccion CodPostal Provincia Importe Rec. Pagados (3) (3) (3) Nombre Poblacion Pais Importe Rec. NO Pagado (4) (4) (4)

Tipo (1) (1) (1)

Nmero nFactura nFactura nFactura

Fecha Fecha Fecha Fecha

F.Pago cCodFPago cCodFPago cCodFPago

Descripcion Descripcion Descripcion

Importe Importe Importe Importe

Pagada Pagada Pagada Pagada

N Recibos (2) (2) (2)

(1) (2) (3) (4)

Los textos en negrita hacen referencia a nombres de los campos de las tablas. Ser un texto cuyo contenido ser Factura si el contenido del campo Abono de la factura es N; en caso contrario el contenido del texto ser Abono. Indicar el nmero total de recibos de la factura. Indicar la suma de los importes de los recibos asociados a la factura que estn pagados. Indicar la suma de los importes de los recibos asociados a la factura que no estn pagados.

d. Se ha de adjuntar el cdigo necesario para la prueba del procedimiento.

La duracin del examen es de 3 horas.

Vous aimerez peut-être aussi