Advertisement
AmbarG

tp5parte1

Oct 2nd, 2024
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --Creacion de tablas:
  2.  
  3. create table deporte (id_deporte integer, nombre_deporte varchar (15), primary key (id_deporte));
  4. create table equipo (codigo_equipo integer, nombre_equipo varchar(20), codigo_zona varchar(3), id_deporte integer, categoria varchar(1),
  5.                         primary key (codigo_equipo));
  6.                        
  7. create table zona(codigo_zona varchar(2),nombre_zona varchar(15),primary key(codigo_zona));
  8.  create table region (id_region integer, nombre_region varchar (10), primary key (id_region));
  9.  create table ciudad (codigo_ciudad integer, nombre_ciudad varchar(12),id_region integer, primary key(codigo_ciudad), cp varchar(4),
  10.                         foreign key(id_region) references region(id_region));
  11.  create table campeonato(codigo_equipo integer, codigo_ciudad integer, fecha date, entradas_vendidas integer, precio_entrada numeric (12,2),
  12.                 primary key(codigo_equipo,codigo_ciudad));
  13.  
  14. --rellenar tablas:
  15. insert into zona
  16. values
  17.         ('aa','zonaA'),
  18.         ('bb','zonaB'),
  19.         ('cc','zonaC');
  20.  
  21. insert into deporte
  22. values
  23.         (1010, 'futbol'),
  24.         (2020,'voley'),
  25.         (3030,'basquet');
  26.  
  27. insert into ciudad
  28. values
  29.         (100,'s.s.jujuy',10,4600),
  30.         (200,'palpala',10,4612),
  31.         (300,'ledesma',11,4512),
  32.         (400,'yavi',12,4651);
  33.  
  34. insert into region
  35. values
  36.         (10,'valle'),
  37.         (11,'yungas'),
  38.         (12,'puna');
  39.  
  40. insert into equipo
  41. values
  42.         (1,'equipo1', 'aa', 1010,'a'),
  43.         (2,'equipo2','bb',2020,'a'),
  44.         (3,'equipo3','cc',1010,'b'),
  45.         (4,'equipo4','aa',2020,'b'),
  46.         (5,'equipo5','bb',3030,'a');
  47.  
  48.  
  49. insert into campeonato
  50. values
  51.         (1,100,'03-03-2023',500,30000.00),
  52.         (1,200,'07-03-2023',800,20000.00),
  53.         (2,200,'04-03-2023',200,10000.00),
  54.         (3,100,'03-03-2023',600,15000.00),
  55.         (4,300,'05-03-2023',400,20000.00),
  56.         (2,400,'10-03-2023',250,5000.00),
  57.         (5,300,'08-03-2023',350,30000.00),
  58.         (3,400,'07-03-2023',700,15000.00);
  59.  
  60. --1. Realice una función que reciba como parámetro el nombre de la zona y devuelva la
  61. --cantidad de campeonatos realizados en esa zona.
  62.  
  63. create or replace function cant_campeonatos(nombrede_zona TEXT)
  64. returns INTEGER AS $$
  65. declare
  66.     numerodecam_realizados INTEGER;
  67. begin
  68.     select count(*)
  69.     into numerodecam_realizados
  70.     from campeonato
  71.     join equipo on campeonato.codigo_equipo=equipo.codigo_equipo
  72.     join zona on equipo.codigo_zona=zona.codigo_zona
  73.     where zona.nombre_zona=nombrede_zona;
  74.  
  75.     return numerodecam_realizados;
  76. End;
  77. $$language plpgsql;
  78.  
  79. select cant_campeonatos('zonaC');
  80.  
  81. --2. Realice una función que reciba como parámetro el nombre de una región y devuelva el
  82. --importe total recaudado en esa región.
  83. create or replace function recaduo_total(nombre_r TEXT)
  84. returns integer as $$
  85. declare
  86.     importe_total integer;
  87. begin
  88.     select sum (precio_entrada*entradas_vendidas)
  89.     into importe_total
  90.     from campeonato
  91.     join ciudad on campeonato.codigo_ciudad = ciudad.codigo_ciudad
  92.     join region on ciudad.id_region = region.id_region
  93.    
  94.     where region.nombre_region = nombre_r;
  95.    
  96.     return importe_total;
  97. end;
  98. $$language plpgsql;
  99.  
  100. select recaduo_total('yungas');
  101. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  102.  
  103. --3. Realice una función que muestre por pantalla la cantidad total de registros de todas las tablas.
  104.  
  105. --4. Realice una función que reciba como parámetro un id de deporte y devuelva el nombre de
  106. --los equipos que practican ese deporte.
  107.  
  108. create or replace function equipos_practican(ide_deporte integer)
  109. returns table(nombre_equipo text) as $$
  110. begin
  111.  
  112.     return query
  113.     select equipo.nombre_equipo::text
  114.     from equipo
  115.     join deporte on equipo.id_deporte = deporte.id_deporte
  116.     where equipo.id_deporte = ide_deporte;
  117.  
  118. end;
  119. $$language plpgsql;
  120.  
  121. select * from equipos_practican(1010);
  122.  
  123. ---otra alternativa, prque ademas del nombre del equipo quiero mostrar el nombre del deporte y el id deporte
  124. -- especifico q son text asi en select no me genera error. a id deporte no hace falta ponerle integer de new
  125. create or replace function practicaan(ide_deporte integer)
  126. returns table(nombre_equipo text, nombress_deportes text, id_deporte integer ) as $$
  127. begin
  128.     return query
  129.     select equipo.nombre_equipo::text, deporte.nombre_deporte::text, deporte.id_deporte
  130.     from equipo
  131.     join deporte on equipo.id_deporte = deporte.id_deporte
  132.     where equipo.id_deporte = ide_deporte;
  133. end;
  134. $$language plpgsql;
  135. --llamada a la funcion:
  136. select * from practicaan(2020);
  137. +++++++++++++++++++
  138.  
  139. --5. Realice una función que reciba como parámetro el Código Equipo, cargue un cursor con
  140. --todos los datos de los campeonatos en los que participó el equipo, luego debe abrir el
  141. --cursor, y calcular el importe recaudado en cada campeonato (entradas vendidas * precio
  142. --entrada), sume el total y cargue la variable que será devuelta por la función.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement