Advertisement
JUNIORCEDE1

Untitled

Jul 4th, 2017
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. CREATE TABLE NADADOR(
  3. ID_NADADOR                                     VARCHAR2(10),
  4. NOMBRES_NADADOR                              VARCHAR2(40),
  5. NACIONALIDAD_NADADOR                         VARCHAR2(40),
  6. TIEMPO_RECORD_EN_SEGUNDOS                    INTEGER,
  7. NUMERO_CAMPEONATOS_GANADOS                   INTEGER
  8. );
  9.  
  10.  
  11. CREATE TABLE CAMPEONATO(
  12. ID_CAMPEONATO                               VARCHAR2(10),
  13. NOMBRE_CAMPEONATO                          VARCHAR2(50),
  14. NOMBRE_ATLETA_PRIMER_LUGAR                 VARCHAR2(50),
  15. TIEMPO_SEGUNDOS_PRIMER_LUGAR               INTEGER
  16. );
  17.  
  18. CREATE TABLE RESULTADO_CAMPEONATO(
  19. TIEMPO_EN_SEGUNDOS                              INTEGER NOT NULL,
  20. ID_NADADOR                                     VARCHAR2(10) NOT NULL,
  21. ID_CAMPEONATO                               VARCHAR2(10) NOT NULL
  22. );
  23.  
  24.  
  25. CREATE OR REPLACE TRIGGER TR_B_IU_NACIONALIDAD
  26. BEFORE
  27. INSERT OR UPDATE OF NACIONALIDAD_NADADOR ON NADADOR
  28. FOR EACH ROW WHEN (NOT (UPPER(NEW.NACIONALIDAD_NADADOR)='ECUADOR') AND NOT (UPPER(NEW.NACIONALIDAD_NADADOR)='COLOMBIA') AND NOT (UPPER(NEW.NACIONALIDAD_NADADOR)='VENEZUELA'))
  29. DECLARE
  30. BEGIN
  31.     RAISE_APPLICATION_ERROR(-20001,'Nacionalidad Nadador solo acepta estos valores: "ECUADOR", "COLOMBIA", "VENEZUELA";  en mayusculas o minusculas ');
  32. END TR_B_IU_NACIONALIDAD;
  33.  
  34. CREATE OR REPLACE TRIGGER TR_B_IU_TIEMPOCAMPEONADO
  35. AFTER
  36. INSERT OR UPDATE OF TIEMPO_EN_SEGUNDOS  ON RESULTADO_CAMPEONATO
  37. FOR EACH ROW
  38. DECLARE
  39. tiempoanterior INTEGER;
  40. BEGIN
  41.     SELECT TIEMPO_RECORD_EN_SEGUNDOS INTO tiempoanterior FROM NADADOR WHERE ID_NADADOR = :NEW.ID_NADADOR;
  42.     IF :NEW.tiempo_en_segundos < tiempoanterior THEN
  43.         UPDATE NADADOR SET TIEMPO_RECORD_EN_SEGUNDOS = :NEW.tiempo_en_segundos WHERE ID_NADADOR = :NEW.ID_NADADOR;
  44.     END IF;
  45. END TR_B_IU_TIEMPOCAMPEONADO;
  46.  
  47. CREATE OR REPLACE TRIGGER TR_B_IU_PRIMERLUGAR
  48. before
  49. INSERT OR UPDATE ON RESULTADO_CAMPEONATO
  50. FOR EACH ROW
  51. DECLARE
  52. primero INTEGER := 0;
  53. id_nadador VARCHAR2(10);
  54. nombre VARCHAR2(50);
  55. BEGIN
  56.     primero := :NEW.tiempo_en_segundos;
  57.     id_nadador := :NEW.id_nadador;
  58.     FOR i IN (SELECT * FROM RESULTADO_CAMPEONATO WHERE ID_CAMPEONATO = :NEW.ID_CAMPEONATO )
  59.     LOOP
  60.         IF i.tiempo_en_segundos < primero THEN
  61.          primero := i.tiempo_en_segundos;
  62.          id_nadador := i.id_nadador;
  63.         END IF;
  64.     END LOOP;
  65.     FOR i IN (SELECT * FROM NADADOR WHERE ID_NADADOR = id_nadador )
  66.     LOOP
  67.         nombre := i.nombres_nadador;
  68.     END LOOP;
  69.     UPDATE CAMPEONATO SET NOMBRE_ATLETA_PRIMER_LUGAR = nombre, TIEMPO_SEGUNDOS_PRIMER_LUGAR = primero WHERE ID_CAMPEONATO = :NEW.ID_CAMPEONATO;
  70. END TR_B_IU_PRIMERLUGAR;
  71.  
  72. INSERT INTO RESULTADO_CAMPEONATO VALUES(17,'6','1');
  73. SELECT * FROM RESULTADO_CAMPEONATO;
  74. DELETE FROM resultado_campeonato WHERE ID_NADADOR='5';
  75. DELETE FROM NADADOR WHERE ID_NADADOR='6';
  76. INSERT INTO NADADOR VALUES('1','CHRIS','ECUADOR','18','3');
  77. INSERT INTO NADADOR VALUES('2','FERNANDO','COLOMBIA','19','2');
  78. INSERT INTO NADADOR VALUES('3','LOPEZ','VENEZUELA','20','1');
  79. INSERT INTO NADADOR VALUES('4','MACIAS','ecuador','21','1');
  80. INSERT INTO NADADOR VALUES('5','MACIAS','ecuador','21','1');
  81. INSERT INTO NADADOR VALUES('6','BERMELLO','ecuador',20,3);
  82. SELECT * FROM nadador;
  83. SELECT * FROM campeonato;
  84.  
  85. INSERT INTO campeonato VALUES('1','CAMPEONATO1',NULL,NULL);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement