Está en la página 1de 4

Examen

Taller de Bases de Datos.


Lunes 18 de Julio de 2011

Nombre:_______________________________________________Nota:_____

Para el siguiente esquema de BD, cree el usuario, la vista, procedimiento


almacenado y trigger requeridos de acuerdo a lo especificado en la página
siguiente. La copia de seguridad de la BD se encuentra en el Blog del curso.
PUEDEN USAR APUNTES.
El nivel de exigencia es del 60%.
El tiempo de duración es de 120 minutos.
Puntaje total: 85 puntos.

Se encuentran creados los siguientes procedimientos almacenados:


Procedimiento de inserción en tabla compra: insert_compra_1
exec insert_compra_1 'NULL' (compra de usuario no registrado)
exec insert_compra_1 '13432342-6' (compra de usuario registrado)

Procedimiento de inserción en tabla compra_prod: insert_prod_compra_1


exec insert_prod_compra_1 42,'232434',5 (nr compra, código prod, cantidad)
Almacenes Kollao se ha expandido; ahora es Supermercados Kollao. Por
lo mismo, su dueño ha decidido implantar una Base de Datos para
manejar a los clientes y sus compras. Para que esto funcione, le solicita a
Ud. genere los ítems que se definen a continuación. Este sistema
funciona de la siguiente manera:
Se genera una nueva compra (tabla compra). Su código se genera
automáticamente. Se debe especificar si la compra la hace un cliente
registrado u otro. El atributo valor queda NULL.
De acuerdo al número de la compra, se ingresan los productos y las
cantidades correspondientes (tabla compra_prod).
Cada producto tiene un porcentaje de descuento en su valor unitario (puede ser 0).
Cada producto permite acumular puntos-kup a ser canjeados después; estos están
definidos en el registro de productos (puede ser 0).

1. Cree un procedimiento almacenado que dado el número de compra pasado como


parámetro, calcule el valor total de la compra. Ese valor calculado debe mostrarse
por pantalla e ingresarse en la tabla compra en el registro correspondiente.
Además, si el cliente está registrado, debe calcular la cantidad de puntos_kup
ganados en la compra, imprimirlo por pantalla y luego actualizar esta cantidad en
la que acumula el cliente.
(35 puntos)
C: 5
A1: 13
A2: 12
S/E: 5

2. Se ha definido que no se pueden realizar compras de más de 5 productos de


aquellos que tengan un porcentaje de descuento mayor al 5% de su valor. En ese
caso, no se debe poder insertar la compra. Cree un trigger que valide esto.
(25 puntos)
C: 10
A: 5
S/E. 10

3. Cree una vista que muestre las compras realizadas sólo por clientes registrados.
Debe mostrar el nombre y apellido del cliente (Nombre Cliente), la fecha de la
compra (Fecha Compra) y el valor de la compra (Valor Total).
(15 puntos)
A: 10
S/E. 5

4.- Cree un usuario que sólo pueda registrar nuevos clientes y ver sus datos.
(10 puntos)
PAUTA:
Esta pauta es sólo una referencia; al ser un ramo práctico hay distintas formas
de programar lo mismo.

1.
Create procedure calcular_total (@nrcompra int)
as
declare @total int
declare @puntos int
select @total= (select SUM(cantidad*(precio-precio*descuento/100)) from producto,
prod_compra where prod_compra.producto=producto.codigo_producto and
codigo_c=@nrcompra)
update compra
set total=@total
where codigo_c=@nrcompra
print 'El total de la compra es: $' +cast(@total as varchar)

if (select cliente from compra where codigo_c=@nrcompra) != 'NULL'


begin
select @puntos= (select SUM(cantidad*puntos) from producto, prod_compra where
prod_compra.producto=producto.codigo_producto and codigo_c=@nrcompra)
update cliente
set puntos=puntos+@puntos
from cliente, compra
where cliente.rut_cliente=compra.cliente and compra.codigo_c=@nrcompra
print 'Puntos ganados con esta compra: ' +cast(@puntos as varchar)
end

2.
create trigger topecompradescuento
on prod_compra
for insert
as

declare @producto varchar (8)


declare @cantidad int
declare @descuento int

select @producto=(select producto from inserted)


select @cantidad=(select cantidad from inserted)
select @descuento=(select descuento from producto where
codigo_producto=@producto)

if (@descuento>5) and (@cantidad>5)


begin
raiserror ('No se puede comprar más de 5 productos con descuento mayor de
5%',16,1)
rollback transaction
end
else
print '--------'
3.
Create view compras (Nombre_Cliente, Fecha_compra, Total)
as
select primer_nombre+' '+primer_apellido, fecha, total from compra, cliente where
compra.cliente=cliente.rut_cliente and compra.cliente!='NULL'

4.
En SQL Server.

También podría gustarte