Advertisement
AmbarG

tp5continuacion

Oct 9th, 2024
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --5. Realice una función que reciba como parámetro el Código Equipo, cargue un cursor con
  2. --todos los datos de los campeonatos en los que participó el equipo, luego debe abrir el
  3. --cursor, y calcular el importe recaudado en cada campeonato (entradas vendidas * precio
  4. --entrada), sume el total y cargue la variable que será devuelta por la función.
  5.  
  6. create or replace function importe_recaudado(codigo_eq int)
  7. returns numeric as $$
  8. declare
  9.     campeonato_cursor cursor for
  10.         select entradas_vendidas, precio_entrada
  11.         from campeonato
  12.         where codigo_equipo = codigo_eq;
  13.  
  14.         variable_entradas int;
  15.         variable_precio numeric;
  16.  
  17.         variable_total numeric := 0;
  18.  
  19. begin
  20.  
  21.     open campeonato_cursor;
  22.  
  23.     loop
  24.         fetch campeonato_cursor into variable_entradas, variable_precio;
  25.  
  26.         exit when not found;
  27.  
  28.         variable_total := variable_total + (variable_entradas * variable_precio);
  29.     end loop;
  30.  
  31.     close campeonato_cursor;
  32.  
  33.     return variable_total;
  34.  
  35. end;
  36.  
  37. $$ language plpgsql;
  38.  
  39. select importe_recaudado(3);
  40.  
  41. --6. Realice una función que reciba como parámetros el nombre del deporte, cargue el cursor
  42. --con los nombres de las ciudades y las fechas en las cuales se realizaron campeonatos
  43. --para ese deporte, lea el cursor y grabe esos datos en una tabla denominada
  44. --“deporte_por_ciudad”
  45.  
  46. create table deporte_por_ciudad(nombre_ciudad text,fecha date, deporte text);
  47.  
  48. create or replace function registro_deporte(nombred text)
  49. returns  void  as $$
  50. declare
  51.     cursor_infocamp cursor for
  52.         select c.nombre_ciudad, ca.fecha, d.nombre_deporte
  53.         from campeonato ca
  54.         inner join equipo e on ca.codigo_equipo = e.codigo_equipo
  55.         inner join deporte d on e.id_deporte = d.id_deporte
  56.         inner join ciudad c on ca.codigo_ciudad = c.codigo_ciudad
  57.         where d.nombre_deporte = nombred;
  58.  
  59.  
  60.     variable_nombre_ciudad text;
  61.     variable_fecha date;
  62.     variable_nombre_deporte text;
  63.  
  64. begin
  65.     open cursor_infocamp;
  66.     loop
  67.         fetch cursor_infocamp into variable_nombre_ciudad,variable_fecha,variable_nombre_deporte;
  68.  
  69.         exit when not found;
  70.         insert into deporte_por_ciudad (nombre_ciudad,fecha,nombre_deporte)
  71.         values(variable_nombre_ciudad,variable_fecha,variable_nombre_deporte);
  72.     end loop;
  73.  
  74.     close cursor_infocamp;
  75.  
  76. end;
  77. $$language plpgsql;
  78.  
  79. --le cambie el nombre a la columna porque en la funcion le asigne otro nombre, se debe respetar los nombres
  80. --de las columnas
  81. alter table deporte_por_ciudad
  82. rename column deporte to nombre_deporte;
  83.  
  84. --aca llamo a la funcion y no me va a deolver nada porque le asigna los datos a la tabla que creamos antes
  85. select registro_deporte('voley');
  86.  
  87. --aca llamo a la tabla y me aparecen los datos ya guardados. entonces si quiero ver de otro deporte tengo
  88. --que volver a llamar a la funcion y colocar el deporte y despues  llamar a la tabla y me apareceria actualizada.
  89. select * from deporte_por_ciudad;
  90.  
  91. select registro_deporte('futbol');
  92. select * from deporte_por_ciudad;
  93.  
  94. select registro_deporte('basquet');
  95. select * from deporte_por_ciudad;
  96.  
  97.  
  98. --7. Realice una función que reciba como parámetros una “Fecha desde” y una “Fecha hasta”,
  99. --cargue el cursor con los datos de los campeonatos realizados en ese rango de fecha, lea
  100. --el cursor y grabe dichos datos en la tabla “resumen_campeonato”. Esta última tabla tiene
  101. --los mismos campos que la tabla campeonato, en la cual no es necesario crear las claves
  102. --primarias y foráneas.
  103. select * from campeonato;
  104. --creo la tabla de resumen campeonato:
  105. create table resumen_campeonato(
  106.     fecha date,
  107.     entradas_vendidas integer,
  108.     precio_entrada numeric);
  109. --creo la funcion q va a tener el cursor con el rango de fecha:
  110. create or replace function campeonato_rango(fechadesde date, fechahasta date)
  111. returns void as $$
  112. declare
  113.     rangos cursor for
  114.         select ca.fecha, ca.entradas_vendidas, ca.precio_entrada
  115.         from campeonato ca
  116.         where ca.fecha between fechadesde and fechahasta;
  117.  
  118.     variable_fecha date;
  119.     variable_entrada int;
  120.     variable_precio numeric;
  121. begin
  122.     open rangos;
  123.     loop
  124.         fetch rangos into variable_fecha,variable_entrada,variable_precio;
  125.         exit when not found;
  126.    
  127.         insert into resumen_campeonato(fecha,entradas_vendidas,precio_entrada)
  128.         values(variable_fecha,variable_entrada,variable_precio);
  129.     end loop;
  130.  
  131.     close rangos;
  132. end;
  133. $$language plpgsql;
  134.  
  135. --Llamo a la funcion con el rango de fechas:
  136. select campeonato_rango('03-03-2023','07-03-2023');
  137.  
  138. --Llamo a la tabla donde ya va a estar con las fechas cargadas:
  139. select * from resumen_campeonato
  140. order by resumen_campeonato;
  141.  
  142. --Es importante respetar el desde y hasta es decir, poner primero la fecha menor y luego la mayor
  143. --sino no lo va a tomar
  144. select campeonato_rango('08-03-2023','10-03-2023');
  145. select * from resumen_campeonato
  146. order by resumen_campeonato;
  147.  
  148. --8. Realice un trigger que antes de guardar un nuevo registro en campeonato, cuando el
  149. --nombre de la ciudad es “Ledesma”, el precio de la entrada permitido para esa ciudad es
  150. --$35.000.
  151. create or replace function verificar()
  152. returns trigger as $$
  153. begin
  154.     if (select nombre_ciudad from ciudad where codigo_ciudad = new.codigo_ciudad) = 'ledesma' then
  155.         new.precio_entrada := 35000;
  156.     end if;
  157.  
  158.     return new;
  159. end;
  160. $$language plpgsql;
  161.  
  162. create trigger validar
  163. before insert on campeonato
  164. for each row
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement