Está en la página 1de 2

Matias Bussetti

vistas
1.
CREATE view vistas_ej_1 (banda, fecha, hora, ciudad, "precio ticket") as
select bandas.nombre, funcion.fecha, funcion.hora, lugar.ciudad, funcion.precio
from bandas
inner join funcion ON funcion.idbanda = bandas.idbanda
inner join lugar on lugar.idlugar = funcion.idlugar;
2. Cambiar inner join de ticket reserva por left join
CREATE view vistas_ej_2 (banda, lugar, fecha, hora, "cantiadad de asistentes") as
select bandas.nombre, lugar.nombre, funcion.fecha, funcion.hora,
count(ticketsreserva.idfuncion) from funcion inner join ticketsreserva ON
ticketsreserva.idfuncion = funcion.idfuncion left join bandas ON bandas.idbanda =
funcion.idbanda LEFT join lugar ON lugar.idlugar = funcion.idlugar group by
funcion.idfuncion, bandas.nombre, lugar.nombre;
Funciones
1.
create or replace function funciones_ej_1(text)
returns TABLE(lugar text, fecha date, hora integer) as 'select lugar.nombre as lugar,
funcion.fecha, funcion.hora from funcion
inner join bandas ON bandas.idbanda = funcion.idbanda inner join lugar ON lugar.idlugar =
funcion.idlugar
where funcion.fecha > now() and bandas.nombre = $1
order by funcion.fecha;'
language sql;
2.
--- FUncion que devuelve la cantiadad de tickets en un funcion en especifico
create or replace function cantiadadTicketEnFuncion(integer)
returns INTEGER as 'select count(*) from ticketsreserva where idfuncion = $1'
language sql;

create or replace function ticketDisponibles(text, date, integer, text)


returns INTEGER as
'
select ( lugar.capacidad - cantiadadTicketEnFuncion(funcion.idfuncion) ) as "Asientos
Disponibles" from funcion
inner join bandas on bandas.idbanda = funcion.idbanda
inner join lugar on lugar.idlugar = funcion.idlugar
where bandas.nombre = $1 and funcion.fecha = $2 and funcion.hora = $3 and lugar.nombre
= $4
'
language sql;
Matias Bussetti

3.
create or replace function cantiadadTicketEnFuncion(integer)
returns INTEGER as 'select count(*) from ticketsreserva where idfuncion = $1'
language sql;
CREATE OR REPLACE FUNCTION comprobarRentabilidad(text, date, integer, text)
RETURNS boolean
AS
'
select ( funcion.precio * cantiadadTicketEnFuncion(funcion.idfuncion) ) - bandas.cachet > 0
as "Asientos Disponibles" from funcion
inner join bandas on bandas.idbanda = funcion.idbanda
inner join lugar on lugar.idlugar = funcion.idlugar
where bandas.nombre = $1 and funcion.fecha = $2 and funcion.hora = $3 and lugar.nombre
= $4
'
LANGUAGE sql;
Triggers
1.
select insertarEntradaDeProtocolo()

create or REPLACE function insertarEntradaDeProtocolo()


returns trigger as $$
BEGIN
if NOT EXISTS(select * from personas where personas.dni = 111111)
then INSERT INTO public.personas(dni, nombre, apellido) VALUES
(111111,'','');

end if;
INSERT INTO ticketsreserva(idfuncion, idpersona) VALUES ( new.idfuncion, 111111);
return new;
END;
$$ LANGUAGE plpgsql
--- Registro del Trigger
create or REPLACE trigger registrar_entrada_protocolo AFTER insert on funcion
for each row
execute procedure insertarEntradaDeProtocolo();
Indices
1.
CREATE INDEX idx_ej_1 ON bandas(nombre);
2.
CREATE INDEX idx_ej_2 ON personas(apellido);

También podría gustarte