Advertisement
AmbarG

p9alp12 tp5 finish

Oct 12th, 2024
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --9. Realice un trigger que guarde un registro en la tabla histórico_equipo (codigo equipo,
  2. --nombre_equipo, codigo_zona, id_deporte, nombre_deporte, fecha_modificación), cada vez
  3. --que se actualiza el el nombre_equipo en la tabla equipo. Previamente, debe crear la tabla
  4. --historico_equipo sin clave primaria.
  5. create table historico_equipo(
  6.     codigo_equipo integer,
  7.     nombre_equipo varchar(20),
  8.     codigo_zona varchar(3),
  9.     id_deporte integer,
  10.     nombre_deporte varchar(20),
  11.     fecha_modificacion date
  12. );
  13.  
  14. select * from historico_equipo;
  15.  
  16. ALTER TABLE historico_equipo
  17. ALTER COLUMN fecha_modificacion TYPE TIMESTAMP;
  18.  
  19.  
  20. create or replace function historial()
  21. returns trigger as $$
  22. begin
  23.     insert into historico_equipo(
  24.     codigo_equipo,
  25.     nombre_equipo,
  26.     codigo_zona,
  27.     id_deporte,
  28.     nombre_deporte,
  29.     fecha_modificacion
  30.     )
  31. values(
  32.     new.codigo_equipo,
  33.     new.nombre_equipo,
  34.     new.codigo_zona,
  35.     new.id_deporte,
  36.     (select nombre_deporte from deporte where id_deporte = new.id_deporte),
  37.     current_timestamp
  38.     );
  39.  
  40.     return new;
  41. end;
  42. $$language plpgsql;
  43.  
  44. create trigger historial_trigger
  45. after update of nombre_equipo
  46. on equipo
  47. for each row
  48. execute function historial();
  49.  
  50. select * from equipo;
  51.  
  52. update equipo
  53. set nombre_equipo = 'new'
  54. where codigo_equipo = 1;
  55.  
  56. select * from historico_equipo;
  57.  
  58. --10. Realice un trigger que cada vez que se ingresa un nuevo registro en la tabla campeonato
  59. --correspondiente a la región "Puna", guarde un nuevo registro en la tabla
  60. --"campeonato_puna". La tabla denominada “campeonato_puna” tiene los siguientes
  61. --campos: “fecha_campeonato”, “nombre_equipo”, "nombre_deporte",
  62. --“precio_con_descuento”. El campo “fecha_campeonato” tiene como valor la fecha
  63. --ingresada para el campeonato, el campo “nombre_equipo” corresponde al equipo
  64. --ingresado, el campo "nombre_deporte" es el deporte correspondiente a ese equipo y el
  65. --campo “precio_con_descuento” contiene el precio de la entrada decrementado en un 10%
  66.  
  67.  
  68. create table campeonato_puna(
  69.     fecha_campeonato date,
  70.     nombre_equipo varchar(20),
  71.     nombre_deporte varchar(20),
  72.     precio_con_descuento numeric
  73. );
  74.  
  75. select * from campeonato_puna;
  76.  
  77. create or replace function champ_puna()
  78. returns trigger as $$
  79. begin
  80.     if (select nombre_region from region
  81.         join ciudad on region.id_region = ciudad.id_region
  82.         where ciudad.codigo_ciudad = new.codigo_ciudad) = 'puna'then
  83.  
  84.         insert into campeonato_puna(
  85.         fecha_campeonato,
  86.         nombre_equipo,
  87.         nombre_deporte,
  88.         precio_con_descuento
  89.         )
  90.     values(
  91.     new.fecha,
  92.     (select nombre_equipo from equipo where codigo_equipo = new.codigo_equipo),
  93.     (select nombre_deporte from deporte
  94.         join equipo on deporte.id_deporte = equipo.id_deporte where equipo.codigo_equipo = new.codigo_equipo),
  95.     new.precio_entradas * 0.90
  96.    
  97.     );
  98.     end if;
  99.     return new;
  100. end;
  101. $$language plpgsql
  102.  
  103. create trigger camp_puna
  104. after insert on campeonato
  105. for each row
  106. execute function champ_puna();
  107.  
  108. select*from region;
  109.  
  110. insert into campeonato(codigo_equipo,codigo_ciudad,fecha,entradas_vendidas,precio_entrada)
  111. values(2,400,'24-06-2003',5000,56);
  112.  
  113. select*from ciudad;
  114.  
  115. --11. Realice un trigger que guarde un registro en la tabla auditoria cada vez que se elimina un
  116. --deporte que practican los equipos. Previamente, debe crear la tabla auditoria sin clave
  117. --primaria que posea los mismos registros que la tabla deporte, al cual se le adiciona la
  118. --fecha_actual y hora_actual del sistema.
  119.  
  120. create table auditoria(
  121.     id_deporte integer,
  122.     nombre_deporte varchar (20),
  123.     fecha_actual date,
  124.     hora_actual time
  125. );
  126.  
  127. create or replace function registro_eliminacion()
  128. returns trigger as $$
  129. begin
  130.     insert into auditoria(
  131.     id_deporte,
  132.     nombre_deporte,
  133.     fecha_actual,
  134.     hora_actual
  135.     )
  136.     values(
  137.     old.id_deporte,
  138.     old.nombre_deporte,
  139.     current_date,
  140.     current_time
  141.     );
  142.  
  143.     return old;
  144. end;
  145. $$language plpgsql;
  146.  
  147. create trigger trigger_registroeliminacion
  148. before delete on deporte
  149. for each row
  150. execute function registro_eliminacion();
  151.  
  152. delete from deporte where id_deporte = 2020;
  153.  
  154. select* from deporte;
  155.  
  156. insert into deporte (id_deporte,nombre_deporte)
  157. values(2020,
  158.     'voley');
  159.  
  160. select * from auditoria;
  161.  
  162.  
  163. --12. Realice un trigger que verifique que se haya completado la categoría cuando se ingresa un
  164. --nuevo registro en la tabla equipo, en el caso de que el mencionado campo se encuentre
  165. --vacío, no inserte ese registro y muestre el mensaje “la categoría no fue asignada“.
  166.  
  167. create or replace function verificar_categoria()
  168. returns trigger as $$
  169. begin
  170.     if new.categoria is null or  trim (new.categoria) = '' then
  171.         raise exception 'debe completar categoria';
  172.     end if;
  173.  
  174.     return new;
  175. end;
  176. $$language plpgsql;
  177.  
  178.  
  179. create trigger verificar
  180. after insert on equipo
  181. for each row
  182. execute function verificar_categoria();
  183.  
  184. select * from equipo;
  185.  
  186. insert into equipo
  187. values (
  188.         6,
  189.         'equipo1',
  190.         'aa',
  191.         4040,
  192.         'a'
  193. );
  194. select * from equipo
  195. order by equipo;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement