diff --git a/consulta.sql b/consulta.sql index 4c6a008..7a2db92 100644 --- a/consulta.sql +++ b/consulta.sql @@ -12,18 +12,7 @@ WHERE A.ID_ATLETA NOT IN ( ); -- Consulta 2 --- Parte 1 Crear una vista que trae la cantidad maxima de atletas asociados a un pais que compitan en Atletismo -CREATE OR REPLACE VIEW MAX_ATLETA_ATLETISMO_PAIS AS - SELECT P.ID_PAIS, P.NOMBRE, COUNT(*) AS CANTIDAD_ATLETA - FROM COMPETENCIA C - LEFT JOIN PARTICIPAR_COMPETENCIA PC ON (C.ID_COMPETENCIA = PC.ID_COMPETENCIA) - LEFT JOIN ATLETA A ON A.ID_ATLETA = PC.ID_ATLETA - INNER JOIN DELEGACION D ON (D.ATLETA = A.ID_ATLETA) - INNER JOIN PAIS P ON (P.ID_PAIS = D.PAIS) - WHERE TIPO = (SELECT TD.ID_TIPO FROM TIPOS_DEPORTES TD WHERE (TD.DESCRIPCION = 'ATLETISMO')) - GROUP BY (P.ID_PAIS, P.NOMBRE); - SELECT P.NOMBRE, M.CANTIDAD_ATLETA FROM MAX_ATLETA_ATLETISMO_PAIS M LEFT JOIN PAIS P ON (P.ID_PAIS = M.ID_PAIS) -WHERE (M.CANTIDAD_ATLETA = (SELECT MAX(CANTIDAD_ATLETA) FROM MAX_ATLETA_ATLETISMO_PAIS)) +WHERE (M.CANTIDAD_ATLETA = (SELECT MAX(CANTIDAD_ATLETA) FROM MAX_ATLETA_ATLETISMO_PAIS)); diff --git a/data.sql b/data.sql index 84e09d0..56e5551 100644 --- a/data.sql +++ b/data.sql @@ -13,6 +13,7 @@ INSERT INTO ATLETA (NOMBRE, APELLIDO, FECHA_NACIMIENTO, NACIONALIDAD) VALUES ('I INSERT INTO ATLETA (NOMBRE, APELLIDO, FECHA_NACIMIENTO, NACIONALIDAD) VALUES ('Chris', 'Cromer', TO_DATE('1998-05-22 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'Chilena'); INSERT INTO ATLETA (NOMBRE, APELLIDO, FECHA_NACIMIENTO, NACIONALIDAD) VALUES ('Benjamin', 'Perez', TO_DATE('1992-01-28 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'Argentina'); INSERT INTO ATLETA (NOMBRE, APELLIDO, FECHA_NACIMIENTO, NACIONALIDAD) VALUES ('Diego', 'Perez', TO_DATE('1983-12-24 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'Peruana'); +INSERT INTO ATLETA (NOMBRE, APELLIDO, FECHA_NACIMIENTO, NACIONALIDAD) VALUES ('Kevin', 'Perez', TO_DATE('1983-12-24 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'Peruana'); INSERT INTO PAIS (NOMBRE) VALUES ('Chile'); @@ -134,5 +135,3 @@ INSERT INTO PARTICIPAR_PRECOMPETENCIA (ID_PRECOMPETENCIA, ID_ATLETA, PUNTAJE, FE INSERT INTO PARTICIPAR_COMPETENCIA (ID_COMPETENCIA, ID_ATLETA, FECHA) VALUES (1, 1, TO_DATE('2020-06-06 00:00:00', 'YYYY-MM-DD HH24:MI:SS')); INSERT INTO PARTICIPAR_COMPETENCIA (ID_COMPETENCIA, ID_ATLETA, FECHA) VALUES (1, 2, TO_DATE('2020-06-06 00:00:00', 'YYYY-MM-DD HH24:MI:SS')); INSERT INTO PARTICIPAR_COMPETENCIA (ID_COMPETENCIA, ID_ATLETA, FECHA) VALUES (1, 3, TO_DATE('2020-06-06 00:00:00', 'YYYY-MM-DD HH24:MI:SS')); -INSERT INTO PARTICIPAR_COMPETENCIA (ID_COMPETENCIA, ID_ATLETA, FECHA) VALUES (2, 1, TO_DATE('2020-07-08 00:00:00', 'YYYY-MM-DD HH24:MI:SS')); -INSERT INTO PARTICIPAR_COMPETENCIA (ID_COMPETENCIA, ID_ATLETA, FECHA) VALUES (3, 2, TO_DATE('2020-07-09 00:00:00', 'YYYY-MM-DD HH24:MI:SS')); diff --git a/trigger.sql b/trigger.sql index 6d8c8d7..d9dced7 100644 --- a/trigger.sql +++ b/trigger.sql @@ -6,16 +6,35 @@ ON CIUDAD FOR EACH ROW DECLARE v_id_ciudad CIUDAD.ID_CIUDAD%TYPE; + v_id_ciudad_busqueda CIUDAD.ID_CIUDAD%TYPE; BEGIN SELECT MAX(ID_CIUDAD) INTO v_id_ciudad FROM CIUDAD; - IF v_id_ciudad IS NULL THEN - :NEW.ID_CIUDAD := 1; + IF (:NEW.ID_CIUDAD IS NOT NULL) AND (v_id_ciudad IS NOT NULL) THEN + IF (v_id_ciudad+1) < :NEW.ID_CIUDAD THEN + RAISE_APPLICATION_ERROR(-20120, 'NO SE PUEDE INSERTAR, El ID ingresado es mayor al ID maximo de la tabla'); + END IF; ELSE - :NEW.ID_CIUDAD := v_id_ciudad + 1; + IF v_id_ciudad IS NULL THEN + :NEW.ID_CIUDAD := 1; + ELSE + IF :NEW.ID_CIUDAD IS NOT NULL THEN + SELECT ID_CIUDAD INTO v_id_ciudad_busqueda + FROM CIUDAD WHERE (ID_CIUDAD = :NEW.ID_CIUDAD); + + IF v_id_ciudad_busqueda IS NOT NULL THEN + RAISE_APPLICATION_ERROR(-20120, 'NO SE PUEDE INSERTAR, El ID ingresado ya Existe'); + END IF; + ELSE + :NEW.ID_CIUDAD := v_id_ciudad + 1; + END IF; + END IF; END IF; + + END; +/ -- Trigger 4 CREATE OR REPLACE TRIGGER VALIDACION_PRE_COMPETENCIA @@ -42,6 +61,7 @@ BEGIN END IF; CLOSE PARTICIPAR_PRECO; END; +/ -- Trigger 5 CREATE OR REPLACE TRIGGER CALCULAR_VALOR_DELEGACION diff --git a/trigger_test.sql b/trigger_test.sql index 5c98c60..3637717 100644 --- a/trigger_test.sql +++ b/trigger_test.sql @@ -1,16 +1,22 @@ -- Trigger 3 +INSERT INTO CIUDAD (NOMBRE, PAIS) VALUES ('Quelite', 1); + +INSERT INTO CIUDAD (NOMBRE, PAIS) VALUES ('Convien', 1); + +INSERT INTO CIUDAD (NOMBRE, PAIS) VALUES ('Wingsi', 2); + +INSERT INTO CIUDAD (ID_CIUDAD, NOMBRE, PAIS) VALUES (20, 'Dailys', 2); -- Trigger 4 -INSERT INTO PARTICIPAR_COMPETENCIA (ID_COMPETENCIA, ID_ATLETA, FECHA) VALUES (1, 21, TO_DATE('2020-07-09 00:00:00', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO PARTICIPAR_COMPETENCIA (ID_COMPETENCIA, ID_ATLETA, FECHA) VALUES (1, 5, TO_DATE('2020-07-09 00:00:00', 'YYYY-MM-DD HH24:MI:SS')); -INSERT INTO PARTICIPAR_PRECOMPETENCIA (ID_PRECOMPETENCIA, ID_ATLETA, PUNTAJE, FECHA) VALUES (3, 2, 100, TO_DATE('2020-06-27 00:00:00', 'YYYY-MM-DD HH24:MI:SS')); - -INSERT INTO PARTICIPAR_COMPETENCIA (ID_COMPETENCIA, ID_ATLETA, FECHA) VALUES (1, 21, TO_DATE('2020-07-09 00:00:00', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO PARTICIPAR_PRECOMPETENCIA (ID_PRECOMPETENCIA, ID_ATLETA, PUNTAJE, FECHA) VALUES (1, 5, 20, TO_DATE('2020-05-25 00:00:00', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO PARTICIPAR_COMPETENCIA (ID_COMPETENCIA, ID_ATLETA, FECHA) VALUES (1, 5, TO_DATE('2020-07-09 00:00:00', 'YYYY-MM-DD HH24:MI:SS')); -- Trigger 5 -INSERT INTO HOSPEDAR (ID_HOTEL, ID_DELEGACION, PRECIO_DELEGACION, PRECIO_ATLETA) VALUES (1, 1, 5, 50000); +INSERT INTO HOSPEDAR (ID_HOTEL, ID_DELEGACION, FECHA_INICIO, FECHA_FIN, PRECIO_DELEGACION, PRECIO_ATLETA) VALUES (1, 1, TO_DATE('2020-07-09 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2020-07-12 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 5, 50000); -UPDATE HOSPEDAR SET PRECIO_DELEGACION = 5 WHERE (ID_HOTEL = 1 AND ID_DELEGACION = 1); +UPDATE HOSPEDAR SET PRECIO_DELEGACION = 5 WHERE (ID_HOTEL = 1 AND ID_DELEGACION = 1 AND FECHA_INICIO = '2020-07-09 00:00:00'); -UPDATE HOSPEDAR SET PRECIO_ATLETA = 50000 WHERE (ID_HOTEL = 1 AND ID_DELEGACION = 1); +UPDATE HOSPEDAR SET PRECIO_ATLETA = 50000 WHERE (ID_HOTEL = 1 AND ID_DELEGACION = 1 AND FECHA_INICIO = '2020-07-09 00:00:00'); diff --git a/vista.sql b/vista.sql new file mode 100644 index 0000000..9a8774e --- /dev/null +++ b/vista.sql @@ -0,0 +1,10 @@ +-- Parte 1 Crear una vista que trae la cantidad maxima de atletas asociados a un pais que compitan en Atletismo +CREATE OR REPLACE VIEW MAX_ATLETA_ATLETISMO_PAIS AS + SELECT P.ID_PAIS, P.NOMBRE, COUNT(*) AS CANTIDAD_ATLETA + FROM COMPETENCIA C + LEFT JOIN PARTICIPAR_COMPETENCIA PC ON (C.ID_COMPETENCIA = PC.ID_COMPETENCIA) + LEFT JOIN ATLETA A ON A.ID_ATLETA = PC.ID_ATLETA + INNER JOIN DELEGACION D ON (D.ATLETA = A.ID_ATLETA) + INNER JOIN PAIS P ON (P.ID_PAIS = D.PAIS) + WHERE TIPO = (SELECT TD.ID_TIPO FROM TIPOS_DEPORTES TD WHERE (UPPER(TD.DESCRIPCION) = 'ATLETISMO')) + GROUP BY (P.ID_PAIS, P.NOMBRE); \ No newline at end of file