Está en la página 1de 23

UNIVERSIDAD TCNICA DE AMBATO

Facultad de Ingeniera en Sistemas, Electrnica e Industrial


Proyecto Acadmico de Fin de Semestre

Ttulo:

Campeonato Nacional de Futbol

Carrera:

Ingeniera en Sistemas Computacionales e Informticos

rea Acadmica:

Software

Lnea de Investigacin:

Desarrollo de Software

Ciclo Acadmico y Paralelo:

Quinto Sistemas A

Alumnos participantes:

Carrera Mantilla Erick Israel


Vallejo Cueva Andrew Fabricio

Mdulo y Docente:

Base de Datos II Ing. Buenao Hernando

UNIVERSIDAD TCNICA DE AMBATO


FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL PERODO
ACADMICO: OCTUBRE2015 - MARZO 2016

II.
INFORME DEL PROYECTO
1.2.
PPYY
2.1 Ttulo
Campeonato Nacional de Futbol
2.2 Objetivos
General
Documentar los conceptos bsicos de Base de datos, estableciendo la automatizacin de los
procesos dentro de la Base Campeonato Nacional y establecer los controles necesarios para
el funcionamiento esperado.
Especficos
1. Documentar los conceptos bsicos de Base de Datos.
2. Establecer la automatizacin de los procesos dentro de la Base Campeonato Nacional.

2.3 Resumen

La base de datos relacionada con el Campeonato Nacional se manejara por tablas donde se
podr controlar a jugadores titulares, suplentes, jugadores amonestados o expulsados, tabla de
posiciones, goles que se irn aadiendo a cada equipo y a cada jugador para sacar goleadores.

La base campeonato nacional cumple con todas las reglas principales que se manejan en la vida
real con ello podemos obtener resultados correctos ya que cada tabla contiene informacin
importante que nos ayudara a realizar los procesos internos
2.4 Palabras clave: (Base, triggers, exception, function, if, end, begin, declare)
2.5 Introduccin

En el presente trabajo se muestra la creacin de la base de datos campeonato nacional en


ORACLE, con las cuales se realizarn consultas, actualizaciones, inserciones de
informacin todo controlado con TRIGGERS. Aqu aprenderemos como manejar los
procesos internos como la integridad de datos, el control de datos sucios, controles propios
de la base como la concordancia de datos y uso de tablas internas que ayudan al control son
totalmente transparentes para el usuario el cual solo manejara las interfaces anteriormente
mencionadas, as se evita una serie de error por parte del usuario.
2.6 Materiales y Metodologa

UNIVERSIDAD TCNICA DE AMBATO


FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL PERODO
ACADMICO: OCTUBRE2015 - MARZO 2016

Materiales
Oracle

Metodologa
Triggers
Los Triggers o Disparadores son objetos que se asocian con tablas y se almacenan en la base
de datos. Su nombre se deriva por el comportamiento que presentan en su funcionamiento, ya
que se ejecutan cuando sucede algn evento sobre las tablas a las que se encuentra asociado.
Los eventos que hacen que se ejecute un trigger son las operaciones de insercin (INSERT),
borrado (DELETE) o actualizacin (UPDATE), ya que modifican los datos de una tabla. Los
trigger no soportan el commit.

Primero debemos crear la base de datos con todas las relaciones posibles

A continuacin podemos ver el modelo entidad relacin

UNIVERSIDAD TCNICA DE AMBATO


FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL PERODO
ACADMICO: OCTUBRE2015 - MARZO 2016

Modelo Entidad Relacin

Posteriormente procedemos a la creacin de los triggers

UNIVERSIDAD TCNICA DE AMBATO


FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL PERODO
ACADMICO: OCTUBRE2015 - MARZO 2016

Por ultimo realizamos las inserciones de datos y comprobamos la funcionalidad de los triggers

UNIVERSIDAD TCNICA DE AMBATO


FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL PERODO
ACADMICO: OCTUBRE2015 - MARZO 2016

2.7 Resultados y Discusin


Se obtuvo el control exacto y preciso de lo que sucedi en cada partido, resultados que se
van aadiendo a cada equipo y jugador es decir los puntos y goles, y de esta manera al
terminar la primera etapa poder tener los 2 equipos de cada grupo que quedaros mejor
puntuados y los 2 mejores terceros de los tres grupos, lo que ayuda a crear una fase final
del campeonato.

Adems con el control de los jugadores no puedan entrar al ser cambiado o expulsados al
igual que el control de goles por los mismos detalles mencionados, siempre sern de gran
ayuda para tener un control y transparencia de cada cotejo disput en las diferentes fechas
y diferentes lugares, donde se realiza la copa con un control de asistencia para de esa manera
tambin tener un control ya sea de asistencia o de ganancia por cada partido, refirindose
al costo por entrada.
2.8 Conclusiones
1. El modelo entidad relacin es un paso fundamental en la implementacin de la base ya
que ayuda a tener en claro cmo se relacionan las tablas.
2. A travs de la implementacin de Triggers se puede controlar gran cantidad de

informacin

2.9 Referencias bibliogrficas


[1] Oracle,
Oracle,
Oracle
Documentation,
[En
lnea].
Available:
http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_7004.htm. [ltimo
acceso: 16 08 2015].
[2] Oracle,

Oracle,
[En
lnea]. Available:
http://www.oracle.com/technetwork/database/features/jdbc/jdbc-drivers-12cdownload1958347.html. [ltimo acceso: 16 08 2015].
[3] Netbeans,
Netbeans,
[En
lnea].
https://netbeans.org/kb/docs/ide/oracledb.html. [ltimo acceso: 16 08 2015].
2.10. Fotografas y grficos

Available:

UNIVERSIDAD TCNICA DE AMBATO


FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL PERODO
ACADMICO: OCTUBRE2015 - MARZO 2016

Anexo
Creacin de la base Copa Amrica con los respectivos triggers
CREANDO TABLAS
------------------

CREATE TABLE CIUDADES


(
NOM_CIU VARCHAR (20) PRIMARY KEY
);
CREATE TABLE ESTADIOS
(
COD_EST VARCHAR (5) PRIMARY KEY,
NOM_EST VARCHAR (100) NOT NULL,
CAP_EST VARCHAR (20) NOT NULL,
NOM_CIU_P VARCHAR(20) REFERENCES CIUDADES(NOM_CIU)
);
CREATE TABLE EQUIPOS
(
COD_EQU VARCHAR(5) PRIMARY KEY,
NOM_EQU VARCHAR(20) NOT NULL
);
CREATE TABLE GRUPOS
(
NOM_GRU VARCHAR(1) PRIMARY KEY,
EQUI_1 VARCHAR(5) REFERENCES EQUIPOS(COD_EQU),
EQUI_2 VARCHAR(5) REFERENCES EQUIPOS(COD_EQU),
EQUI_3 VARCHAR(5) REFERENCES EQUIPOS(COD_EQU),
EQUI_4 VARCHAR(5) REFERENCES EQUIPOS(COD_EQU)
);
CREATE TABLE ARBITROS
(
COD_ARB VARCHAR(5) PRIMARY KEY,
NOM_ARB VARCHAR(15) NOT NULL,
APE_ARB VARCHAR(15) NOT NULL
);
CREATE TABLE FECHAS
(
NUM_FEC NUMBER PRIMARY KEY,
FEC_FEC DATE NOT NULL,
TIP_FEC VARCHAR(50) CHECK(TIP_FEC IN('FASE DE
GRUPOS','CUARTOS','SEMIFINALES','FINAL'))

UNIVERSIDAD TCNICA DE AMBATO


FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL PERODO
ACADMICO: OCTUBRE2015 - MARZO 2016

);
CREATE TABLE PARTIDOS
(
NUM_PAR VARCHAR (3) PRIMARY KEY,
FEC_PAR DATE NOT NULL,
COD_EST_P VARCHAR(5) REFERENCES ESTADIOS(COD_EST),
EQUI_1 VARCHAR(5) REFERENCES EQUIPOS(COD_EQU),
EQUI_2 VARCHAR(5) REFERENCES EQUIPOS(COD_EQU),
ARB_CEN VARCHAR(5) REFERENCES ARBITROS(COD_ARB),
ARB_L1 VARCHAR(5) REFERENCES ARBITROS(COD_ARB),
ARB_L2 VARCHAR(5) REFERENCES ARBITROS(COD_ARB),
ARB_SUP VARCHAR(5) REFERENCES ARBITROS(COD_ARB),
ASISTENCIA NUMBER(5) NOT NULL,
NUM_FEC_P NUMBER REFERENCES FECHAS (NUM_FEC),
FINAL VARCHAR(2)
);
CREATE TABLE JUGADORES
(
ID_JUG VARCHAR(5) PRIMARY KEY,
NOM_JUG VARCHAR(15) NOT NULL,
APE_JUG VARCHAR(15) NOT NULL,
NUM_CAM_JUG VARCHAR(2) NOT NULL,
POS_JUG VARCHAR(15) NOT NULL,
NAC_JUG VARCHAR(15) NOT NULL,
SALIO VARCHAR(8) CHECK(SALIO IN ('TITULAR','SUPLENTE','CAMBIO')),
NUM_TAR NUMBER,
EQUI_P VARCHAR(5) REFERENCES EQUIPOS(COD_EQU)
);
CREATE TABLE TITULARES
(
ID_JUG_T VARCHAR(5) REFERENCES JUGADORES (ID_JUG),
NUM_PAR_J VARCHAR(3) REFERENCES PARTIDOS(NUM_PAR),
CONSTRAINT SUPERCLAVE PRIMARY KEY(ID_JUG_T, NUM_PAR_J)
);
CREATE TABLE SUPLENTES
(
ID_JUG_S VARCHAR(5) REFERENCES JUGADORES (ID_JUG),
NUM_PAR_S VARCHAR(3) REFERENCES PARTIDOS(NUM_PAR),
CONSTRAINT SUPERCLAVE1 PRIMARY KEY(ID_JUG_S, NUM_PAR_S)
);
CREATE TABLE NOVEDADES
(
COD_NOV VARCHAR(5) PRIMARY KEY,

UNIVERSIDAD TCNICA DE AMBATO


FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL PERODO
ACADMICO: OCTUBRE2015 - MARZO 2016

DES_NOV VARCHAR(100) NOT NULL,


NUM_PAR VARCHAR(3) REFERENCES PARTIDOS(NUM_PAR)
);
CREATE TABLE SUSTITUCIONES
(
COD_SUS VARCHAR(4) PRIMARY KEY,
ID_JUG_S VARCHAR(5) REFERENCES JUGADORES(ID_JUG),
ID_JUG_E VARCHAR(5) REFERENCES JUGADORES(ID_JUG),
MOT_SUS VARCHAR(30) NOT NULL,
MIN_SUS VARCHAR(15) NOT NULL,
NUM_PAR VARCHAR(3) REFERENCES PARTIDOS(NUM_PAR)
);
CREATE TABLE AMONESTACIONES
(
COD_AMO VARCHAR(4) PRIMARY KEY,
ID_JUG_A VARCHAR(5) REFERENCES JUGADORES(ID_JUG),
COL_TAR VARCHAR(15) NOT NULL,
MOT_AMO VARCHAR(30) NOT NULL,
MIN_AMO VARCHAR(15) NOT NULL,
NUM_PAR VARCHAR(3) REFERENCES PARTIDOS(NUM_PAR)
);
CREATE TABLE GOLES
(
ID_GOL VARCHAR(5) PRIMARY KEY,
DSC_GOL VARCHAR(60) NOT NULL,
MIN_GOL VARCHAR(15) NOT NULL,
ID_JUG_GOL VARCHAR(5) REFERENCES JUGADORES(ID_JUG),
NUM_PAR VARCHAR(3) REFERENCES PARTIDOS(NUM_PAR)
);
CREATE TABLE POSICIONES
(
NOM_GRU_P VARCHAR(1) REFERENCES GRUPOS(NOM_GRU),
PUES NUMBER,
POS VARCHAR(20),
PUN VARCHAR(2) NOT NULL,
GOL_FAVOR NUMBER NOT NULL,
GOL_CONTRA NUMBER NOT NULL,
GOL_DIFERE NUMBER NOT NULL
);
CREATE TABLE GOLEADOR
(
NUM NUMBER,
ID_JUG_G VARCHAR(5) REFERENCES JUGADORES(ID_JUG),

UNIVERSIDAD TCNICA DE AMBATO


FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL PERODO
ACADMICO: OCTUBRE2015 - MARZO 2016

NOMBRE VARCHAR(25),
EQUI VARCHAR(20)
);
CREATE TABLE EXPULSADOS
(
ID_JUG_E VARCHAR(5) REFERENCES JUGADORES(ID_JUG),
NUM_PAR_E VARCHAR(3) REFERENCES PARTIDOS(NUM_PAR),
FEC NUMBER REFERENCES FECHAS(NUM_FEC)
);
TRIGGERS
***************************************************************************
****************
CREATE OR REPLACE TRIGGER CONT_CAMBIOS
AFTER INSERT ON SUSTITUCIONES
FOR EACH ROW
DECLARE
ERROR EXCEPTION; A NUMBER;
E JUGADORES.EQUI_P%TYPE;
B NUMBER;
BEGIN
SELECT EQUI_P INTO E
FROM JUGADORES
WHERE ID_JUG=:NEW.ID_JUG_S;
INSERT INTO CAMBIOS(ID_JUG,NUM_PAR,EQUI)
VALUES(:NEW.ID_JUG_E,:NEW.NUM_PAR,E);
SELECT COUNT(C.NUM_PAR) INTO A
FROM CAMBIOS C, PARTIDOS P
WHERE C.NUM_PAR=P.NUM_PAR
AND C.EQUI=E;
IF A>3 THEN
RAISE ERROR;
END IF;
EXCEPTION
WHEN ERROR THEN
RAISE_APPLICATION_ERROR(-20001,'SOLO PUEDE 3 CAMBIOS POR EQUIPO');
END;
.
/
***************************************************************************
*****************
CREATE OR REPLACE TRIGGER CONT_POSICIONES
AFTER INSERT ON GRUPOS
FOR EACH ROW
BEGIN
INSERT INTO POSICIONES
VALUES(:NEW.NOM_GRU,1,:NEW.EQUI_1,'0','0','0','0');
INSERT INTO POSICIONES

UNIVERSIDAD TCNICA DE AMBATO


FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL PERODO
ACADMICO: OCTUBRE2015 - MARZO 2016

VALUES(:NEW.NOM_GRU,2,:NEW.EQUI_2,'0','0','0','0');
INSERT INTO POSICIONES
VALUES(:NEW.NOM_GRU,3,:NEW.EQUI_3,'0','0','0','0');
INSERT INTO POSICIONES
VALUES(:NEW.NOM_GRU,4,:NEW.EQUI_4,'0','0','0','0');
END;
.
/
***************************************************************************
*****************
CREATE OR REPLACE TRIGGER CONT_CAMBIO
BEFORE INSERT OR UPDATE ON SUSTITUCIONES
FOR EACH ROW
DECLARE
ERROR EXCEPTION;
JS JUGADORES.ID_JUG%TYPE;
ERROR1 EXCEPTION;
ERROR2 EXCEPTION;
SALIO JUGADORES.SALIO%TYPE;
BEGIN
SELECT ID_JUG,SALIO INTO JS,SALIO
FROM JUGADORES
WHERE ID_JUG=:NEW.ID_JUG_S;
IF SALIO='SUPLENTE' OR SALIO='CAMBIO' THEN
RAISE ERROR;
END IF;
SELECT ID_JUG,SALIO INTO JS,SALIO
FROM JUGADORES
WHERE ID_JUG=:NEW.ID_JUG_E;
IF SALIO='TITULAR' OR SALIO ='CAMBIO' THEN
RAISE ERROR1;
END IF;
IF :NEW.ID_JUG_S = :NEW.ID_JUG_E THEN
RAISE ERROR2;
END IF;
UPDATE JUGADORES
SET SALIO = 'CAMBIO'
WHERE ID_JUG=:NEW.ID_JUG_S;
UPDATE JUGADORES
SET SALIO = 'TITULAR'
WHERE ID_JUG=:NEW.ID_JUG_E;
EXCEPTION
WHEN ERROR THEN
RAISE_APPLICATION_ERROR(-20001,'ESE JUGADOR YA NO ESTA EN CANCHA');
WHEN ERROR1 THEN
RAISE_APPLICATION_ERROR(-20002,'ESTE JUGADOR YA SALIO NO PUEDE
ENTRAR DE NUEVO');
WHEN ERROR2 THEN

UNIVERSIDAD TCNICA DE AMBATO


FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL PERODO
ACADMICO: OCTUBRE2015 - MARZO 2016

RAISE_APPLICATION_ERROR(-20003,'ESTA SUSTITUCION NO SE PUEDE


REALIZAR');
END;
.
/
***************************************************************************
*************
CREATE OR REPLACE TRIGGER CONT_GOL
BEFORE INSERT OR UPDATE ON GOLES
FOR EACH ROW
DECLARE
ERROR EXCEPTION;
ERROR1 EXCEPTION;
ERROR2 EXCEPTION;
JS JUGADORES.ID_JUG%TYPE;
MI SUSTITUCIONES.MIN_SUS%TYPE;
NT JUGADORES.NUM_TAR%TYPE;
SALIO JUGADORES.SALIO%TYPE;
C NUMBER;
BEGIN
SELECT COUNT(COD_SUS) INTO C
FROM SUSTITUCIONES
WHERE ID_JUG_E=:NEW.ID_JUG_GOL
OR ID_JUG_S=:NEW.ID_JUG_GOL;
IF C > 0 THEN
SELECT MIN_SUS INTO MI
FROM SUSTITUCIONES
WHERE ID_JUG_E=:NEW.ID_JUG_GOL
OR ID_JUG_S=:NEW.ID_JUG_GOL;
END IF;
IF MI > :NEW.MIN_GOL THEN
RAISE ERROR1;
END IF;
SELECT ID_JUG,SALIO,NUM_TAR INTO JS,SALIO,NT
FROM JUGADORES
WHERE ID_JUG=:NEW.ID_JUG_GOL;
IF SALIO='SUPLENTE' OR SALIO='CAMBIO' THEN
RAISE ERROR;
END IF;
IF NT=2 THEN
RAISE ERROR2;
END IF;
EXCEPTION
WHEN ERROR THEN
RAISE_APPLICATION_ERROR(-20001,'ESE JUGADOR YA NO ESTA EN CANCHA');
WHEN ERROR1 THEN
RAISE_APPLICATION_ERROR(-20002,'NO PUEDE HACER EL GOL EL MINUTO
ESTA MAL');

UNIVERSIDAD TCNICA DE AMBATO


FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL PERODO
ACADMICO: OCTUBRE2015 - MARZO 2016

WHEN ERROR2 THEN


RAISE_APPLICATION_ERROR(-20003,'ESE JUGADOR FUE EXPULSADO');
END;
.
/
***************************************************************************
**************
CREATE OR REPLACE TRIGGER CONT_AMO
AFTER INSERT ON AMONESTACIONES
FOR EACH ROW
DECLARE
ERROR EXCEPTION; ERROR1 EXCEPTION;
JS JUGADORES.ID_JUG%TYPE;
NUM FECHAS.NUM_FEC%TYPE;
ERROR2 EXCEPTION; N NUMBER;
SALIO JUGADORES.SALIO%TYPE;
NUMERO JUGADORES.NUM_TAR%TYPE;
BEGIN
SELECT F.NUM_FEC INTO NUM
FROM FECHAS F,PARTIDOS P
WHERE P.NUM_PAR=:NEW.NUM_PAR
AND P.NUM_FEC_P=F.NUM_FEC;
SELECT COUNT(NUM_PAR_J) INTO N
FROM TITULARES
WHERE NUM_PAR_J=:NEW.NUM_PAR
AND ID_JUG_T=:NEW.ID_JUG_A;
IF N=0 THEN
RAISE ERROR2;
END IF;
IF SALIO='SUPLENTE' OR SALIO='CAMBIO' THEN
RAISE ERROR;
END IF;
SELECT ID_JUG,SALIO,NUM_TAR INTO JS,SALIO,NUMERO
FROM JUGADORES
WHERE ID_JUG=:NEW.ID_JUG_A;
IF :NEW.COL_TAR ='AMARILLA' THEN
UPDATE JUGADORES
SET NUM_TAR=NUMERO+1
WHERE ID_JUG=:NEW.ID_JUG_A;
END IF;
IF :NEW.COL_TAR ='ROJA' THEN
UPDATE JUGADORES
SET NUM_TAR=2
WHERE ID_JUG=:NEW.ID_JUG_A;
END IF;
SELECT ID_JUG,SALIO,NUM_TAR INTO JS,SALIO,NUMERO
FROM JUGADORES
WHERE ID_JUG=:NEW.ID_JUG_A;
IF (:NEW.COL_TAR = 'ROJA') OR (NUMERO = 2) THEN

UNIVERSIDAD TCNICA DE AMBATO


FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL PERODO
ACADMICO: OCTUBRE2015 - MARZO 2016

INSERT INTO EXPULSADOS(ID_JUG_E,NUM_PAR_E,FEC)


VALUES(:NEW.ID_JUG_A,:NEW.NUM_PAR,NUM+1);
END IF;
IF NUMERO >2 THEN
RAISE ERROR1;
END IF;
EXCEPTION
WHEN ERROR THEN
RAISE_APPLICATION_ERROR(-20001,'ESE JUGADOR YA NO ESTA EN CANCHA');
WHEN ERROR1 THEN
RAISE_APPLICATION_ERROR(-20002,'ESE JUGADOR FUE EXPULSADO');
WHEN ERROR2 THEN
RAISE_APPLICATION_ERROR(-20003,'ESE JUGADOR NO ESTA TITULAR EN ESTE
PARTIDO');
END;
.
/
***************************************************************************
****************
CREATE OR REPLACE TRIGGER CONT_ARB
AFTER INSERT ON PARTIDOS
FOR EACH ROW
DECLARE
ERROR EXCEPTION;
BEGIN
IF :NEW.ARB_CEN = :NEW.ARB_L1 OR :NEW.ARB_CEN = :NEW.ARB_L2 OR
:NEW.ARB_CEN = :NEW.ARB_SUP
OR :NEW.ARB_L1 = :NEW.ARB_L2 OR :NEW.ARB_L1 = :NEW.ARB_SUP
OR :NEW.ARB_L2 = :NEW.ARB_SUP THEN
RAISE ERROR;
END IF;
EXCEPTION
WHEN ERROR THEN
RAISE_APPLICATION_ERROR (-20001,'EL MISMO ARBITRO NO PUEDE OCUPAR 2
PUESTOS');
END;
.
/
***************************************************************************
******************
CREATE OR REPLACE TRIGGER FINAL_PARTIDO
AFTER UPDATE ON EQUIPOS_JUGARON
FOR EACH ROW
DECLARE
PUNTOS1 INTEGER; PUNTOS2 INTEGER;
MAR1 INTEGER; MAR2 INTEGER;
TAR_A1 INTEGER:=0; TAR_A2 INTEGER:=0;
TAR_R1 INTEGER:=0; TAR_R2 INTEGER:=0;

UNIVERSIDAD TCNICA DE AMBATO


FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL PERODO
ACADMICO: OCTUBRE2015 - MARZO 2016

AN_GOL1 INTEGER; AN_GOL2 INTEGER;


AN_CONTRA1 INTEGER; AN_CONTRA2 INTEGER;
AN_DIFERE1 INTEGER; AN_DIFERE2 INTEGER;
NOM1 EQUIPOS.COD_EQU%TYPE; NOM2 EQUIPOS.COD_EQU%TYPE;
NOMBRE1 EQUIPOS.NOM_EQU%TYPE; NOMBRE2 EQUIPOS.NOM_EQU%TYPE;
A NUMBER;
BEGIN
SELECT COUNT(ID_GOL) INTO MAR1
FROM GOLES G,PARTIDOS P,JUGADORES J, EQUIPOS E
WHERE G.NUM_PAR = P.NUM_PAR
AND G.ID_JUG_GOL = J.ID_JUG
AND J.EQUI_P = E.COD_EQU
AND J.EQUI_P=P.EQUI_1
AND P.EQUI_1=:NEW.EQUI1
AND P.NUM_FEC_P=:NEW.NUM_FEC_P;
SELECT COUNT(ID_GOL) INTO MAR2
FROM GOLES G,PARTIDOS P,JUGADORES J, EQUIPOS E
WHERE G.NUM_PAR = P.NUM_PAR
AND G.ID_JUG_GOL = J.ID_JUG
AND J.EQUI_P = E.COD_EQU
AND J.EQUI_P=P.EQUI_2
AND P.EQUI_2=:NEW.EQUI2
AND P.NUM_FEC_P=:NEW.NUM_FEC_P;
SELECT E.NOM_EQU INTO NOMBRE1
FROM PARTIDOS P, EQUIPOS E
WHERE P.EQUI_1 = E.COD_EQU
AND :NEW.JUG='SI'
AND :OLD.EQUI1=P.EQUI_1
AND P.NUM_FEC_P=:NEW.NUM_FEC_P
AND P.EQUI_1=:NEW.EQUI1;
SELECT E.NOM_EQU INTO NOMBRE2
FROM PARTIDOS P, EQUIPOS E
WHERE P.EQUI_2 = E.COD_EQU
AND :NEW.JUG='SI'
AND :OLD.EQUI2=P.EQUI_2
AND P.NUM_FEC_P=:NEW.NUM_FEC_P
AND P.EQUI_2=:NEW.EQUI2;
NOM1:=SUBSTR(NOMBRE1,1,3);
NOM2:=SUBSTR(NOMBRE2,1,3);
SELECT COUNT(COD_AMO) INTO TAR_A1
FROM AMONESTACIONES A,PARTIDOS P,JUGADORES J, EQUIPOS E
WHERE COL_TAR ='AMARILLA'
AND A.NUM_PAR = P.NUM_PAR
AND A.ID_JUG_A = J.ID_JUG
AND J.EQUI_P = E.COD_EQU
AND J.EQUI_P=P.EQUI_1
AND P.EQUI_1=:NEW.EQUI1
AND P.NUM_FEC_P=:NEW.NUM_FEC_P;

UNIVERSIDAD TCNICA DE AMBATO


FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL PERODO
ACADMICO: OCTUBRE2015 - MARZO 2016

SELECT COUNT(COD_AMO) INTO TAR_A2


FROM AMONESTACIONES A,PARTIDOS P,JUGADORES J, EQUIPOS E
WHERE COL_TAR ='AMARILLA'
AND A.NUM_PAR = P.NUM_PAR
AND A.ID_JUG_A = J.ID_JUG
AND J.EQUI_P = E.COD_EQU
AND J.EQUI_P=P.EQUI_2
AND P.EQUI_2=:NEW.EQUI2
AND P.NUM_FEC_P=:NEW.NUM_FEC_P;
SELECT COUNT(COD_AMO) INTO TAR_R1
FROM AMONESTACIONES A,PARTIDOS P,JUGADORES J, EQUIPOS E
WHERE COL_TAR ='ROJA'
AND A.NUM_PAR = P.NUM_PAR
AND A.ID_JUG_A = J.ID_JUG
AND J.EQUI_P = E.COD_EQU
AND J.EQUI_P=P.EQUI_1
AND P.EQUI_1=:NEW.EQUI1
AND P.NUM_FEC_P=:NEW.NUM_FEC_P;
SELECT COUNT(COD_AMO) INTO TAR_R2
FROM AMONESTACIONES A,PARTIDOS P,JUGADORES J, EQUIPOS E
WHERE COL_TAR ='ROJA'
AND A.NUM_PAR = P.NUM_PAR
AND A.ID_JUG_A = J.ID_JUG
AND J.EQUI_P = E.COD_EQU
AND J.EQUI_P=P.EQUI_2
AND P.EQUI_2=:NEW.EQUI2
AND P.NUM_FEC_P=:NEW.NUM_FEC_P;
SELECT PUN,GOL_FAVOR,GOL_CONTRA,GOL_DIFERE INTO
PUNTOS1,AN_GOL1,AN_CONTRA1,AN_DIFERE1
FROM POSICIONES
WHERE POS=NOM1;
SELECT PUN,GOL_FAVOR,GOL_CONTRA,GOL_DIFERE INTO
PUNTOS2,AN_GOL2,AN_CONTRA2,AN_DIFERE2
FROM POSICIONES
WHERE POS=NOM2;
IF MAR1 = MAR2 THEN
UPDATE POSICIONES
SET PUN = 1+PUNTOS1
, GOL_FAVOR =MAR1+AN_GOL1
, GOL_CONTRA =MAR2+AN_CONTRA1
WHERE POS=NOM1;
UPDATE POSICIONES
SET PUN = 1+PUNTOS2
, GOL_FAVOR =MAR2+AN_GOL2
, GOL_CONTRA =MAR1+AN_CONTRA2
WHERE POS=NOM2;
END IF;
IF MAR1 > MAR2 THEN

UNIVERSIDAD TCNICA DE AMBATO


FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL PERODO
ACADMICO: OCTUBRE2015 - MARZO 2016

UPDATE POSICIONES
SET PUN = 3+PUNTOS1
, GOL_FAVOR =MAR1+AN_GOL1
, GOL_CONTRA =MAR2+AN_CONTRA1
WHERE POS=NOM1;
UPDATE POSICIONES
SET PUN = 0+PUNTOS2
, GOL_FAVOR =MAR2+AN_GOL2
, GOL_CONTRA =MAR1+AN_CONTRA2
WHERE POS=NOM2;
END IF;
IF MAR2 > MAR1 THEN
UPDATE POSICIONES
SET PUN = 0+PUNTOS1
, GOL_FAVOR =MAR1+AN_GOL1
, GOL_CONTRA =MAR2+AN_CONTRA1
WHERE POS=NOM1;
UPDATE POSICIONES
SET PUN = 3+PUNTOS2
, GOL_FAVOR =MAR2+AN_GOL2
, GOL_CONTRA =MAR1+AN_CONTRA2
WHERE POS=NOM2;
END IF;
SELECT PUN,GOL_FAVOR,GOL_CONTRA,GOL_DIFERE INTO
PUNTOS1,AN_GOL1,AN_CONTRA1,AN_DIFERE1
FROM POSICIONES
WHERE POS=NOM1;
SELECT PUN,GOL_FAVOR,GOL_CONTRA,GOL_DIFERE INTO
PUNTOS2,AN_GOL2,AN_CONTRA2,AN_DIFERE2
FROM POSICIONES
WHERE POS=NOM2;
IF MAR1 = MAR2 THEN
UPDATE POSICIONES
SET GOL_DIFERE = AN_GOL1-AN_CONTRA1
WHERE POS=NOM1;
UPDATE POSICIONES
SET GOL_DIFERE = AN_GOL2-AN_CONTRA2
WHERE POS=NOM2;
END IF;
IF MAR1>MAR2 THEN
UPDATE POSICIONES
SET GOL_DIFERE = AN_GOL1-AN_CONTRA1
WHERE POS=NOM1;
UPDATE POSICIONES
SET GOL_DIFERE = AN_GOL2-AN_CONTRA2
WHERE POS=NOM2;
ELSE
UPDATE POSICIONES

UNIVERSIDAD TCNICA DE AMBATO


FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL PERODO
ACADMICO: OCTUBRE2015 - MARZO 2016

SET GOL_DIFERE = AN_GOL1-AN_CONTRA1


WHERE POS=NOM1;
UPDATE POSICIONES
SET GOL_DIFERE = AN_GOL2-AN_CONTRA2
WHERE POS=NOM2;
END IF;
INSERT INTO
FINAL_PARTIDO(GOLES1,GOLES2,EQUI1,EQUI2,TARJETA_A1,TARJETA_A2,TARJ
ETA_R1,TARJETA_R2)
VALUES(MAR1,MAR2,NOMBRE1,NOMBRE2,TAR_A1,TAR_A2,TAR_R1,TAR_R2);
END;
.
/
***************************************************************************
***
***************************************************************************
*****

CREATE OR REPLACE TRIGGER DESP_FIN_PAR


AFTER UPDATE ON EQUIPOS_JUGARON
FOR EACH ROW
BEGIN
UPDATE PARTIDOS
SET FINAL ='SI'
WHERE NUM_PAR=:NEW.NUM_PAR;
END;
.
/
***************************************************************************
******************
CREATE OR REPLACE TRIGGER CONT_FEC
AFTER INSERT ON PARTIDOS
FOR EACH ROW
DECLARE
A NUMBER;
ERROR EXCEPTION;
BEGIN
SELECT COUNT(NUM_FEC_P) INTO A
FROM EQUIPOS_JUGARON
WHERE NUM_FEC_P=:NEW.NUM_FEC_P
AND (EQUI1=:NEW.EQUI_1
OR EQUI1=:NEW.EQUI_2
OR (EQUI2=:NEW.EQUI_1
OR EQUI2=:NEW.EQUI_2));
INSERT INTO EQUIPOS_JUGARON (EQUI1,EQUI2,NUM_FEC_P,JUG,NUM_PAR)
VALUES (:NEW.EQUI_1,:NEW.EQUI_2,:NEW.NUM_FEC_P,'NO',:NEW.NUM_PAR);

UNIVERSIDAD TCNICA DE AMBATO


FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL PERODO
ACADMICO: OCTUBRE2015 - MARZO 2016

IF (A>0) THEN
RAISE ERROR;
END IF;
EXCEPTION
WHEN ERROR THEN
RAISE_APPLICATION_ERROR (-20001,'EL MISMO EQUIPO NO PUEDE JUGAR 2
VECES EN UNA FECHA');
END;
.
/
***************************************************************************
************
CREATE OR REPLACE TRIGGER CONT_TIT_SUP
AFTER UPDATE ON PARTIDOS
FOR EACH ROW
BEGIN
UPDATE JUGADORES
SET SALIO=''
, NUM_TAR=0;
END;
.
/
***************************************************************************
************
CREATE OR REPLACE TRIGGER CONT_GOLEADOR
AFTER INSERT ON GOLES
FOR EACH ROW
DECLARE
A NUMBER;
E JUGADORES.EQUI_P%TYPE;
EQ EQUIPOS.NOM_EQU%TYPE;
D NUMBER;
NOM JUGADORES.NOM_JUG%TYPE;
ERROR EXCEPTION;
BEGIN
SELECT COUNT(ID_JUG_G) INTO A
FROM GOLEADOR
WHERE ID_JUG_G=:NEW.ID_JUG_GOL;
IF A>0 THEN
SELECT E.NOM_EQU INTO EQ
FROM EQUIPOS E,JUGADORES J
WHERE J.ID_JUG=:NEW.ID_JUG_GOL
AND J.EQUI_P = E.COD_EQU;
SELECT NOM_JUG INTO NOM
FROM JUGADORES
WHERE ID_JUG=:NEW.ID_JUG_GOL;
UPDATE GOLEADOR
SET EQUI=EQ
, NOMBRE=NOM
WHERE ID_JUG_G=:NEW.ID_JUG_GOL;
END IF;

UNIVERSIDAD TCNICA DE AMBATO


FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL PERODO
ACADMICO: OCTUBRE2015 - MARZO 2016

SELECT EQUI_P INTO E


FROM JUGADORES
WHERE ID_JUG=:NEW.ID_JUG_GOL;
SELECT COUNT(NUM_PAR) INTO D
FROM PARTIDOS
WHERE NUM_PAR=:NEW.NUM_PAR
AND( EQUI_1=E
OR EQUI_2=E);
IF D=0 THEN
RAISE ERROR;
END IF;
EXCEPTION
WHEN ERROR THEN
RAISE_APPLICATION_ERROR(-20002,'ESE JUGADOR NO PERTENECE A ESE
PARTIDO');
END;
.
/
***************************************************************************
************
CREATE OR REPLACE TRIGGER CONT_GOLE
BEFORE UPDATE ON GOLEADOR
FOR EACH ROW
DECLARE
BEGIN
:NEW.NUM:=:OLD.NUM+1;
END;
.
/
***************************************************************************
************
CREATE OR REPLACE TRIGGER RES_GOLE
AFTER INSERT ON JUGADORES
FOR EACH ROW
BEGIN
INSERT INTO GOLEADOR(NUM,ID_JUG_G,NOMBRE)
VALUES(0,:NEW.ID_JUG,'');
END;
.
/
***************************************************************************
************
CREATE OR REPLACE TRIGGER CONT_TITULARES
AFTER INSERT OR UPDATE ON TITULARES
FOR EACH ROW
DECLARE
A NUMBER;
B EXPULSADOS.FEC%TYPE;
C FECHAS.NUM_FEC%TYPE;
D NUMBER;
E JUGADORES.EQUI_P%TYPE;

UNIVERSIDAD TCNICA DE AMBATO


FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL PERODO
ACADMICO: OCTUBRE2015 - MARZO 2016

ERROR EXCEPTION; ERROR1 EXCEPTION;


BEGIN
SELECT COUNT(F.NUM_FEC) INTO A
FROM EXPULSADOS E,PARTIDOS P,FECHAS F
WHERE E.ID_JUG_E=:NEW.ID_JUG_T
AND E.NUM_PAR_E =P.NUM_PAR
AND P.NUM_FEC_P=F.NUM_FEC;
SELECT EQUI_P INTO E
FROM JUGADORES
WHERE ID_JUG=:NEW.ID_JUG_T;
SELECT COUNT(NUM_PAR) INTO D
FROM PARTIDOS
WHERE NUM_PAR=:NEW.NUM_PAR_J
AND( EQUI_1=E
OR EQUI_2=E);
IF D=0 THEN
RAISE ERROR1;
END IF;
IF A >0 THEN
SELECT FEC INTO B
FROM EXPULSADOS
WHERE ID_JUG_E=:NEW.ID_JUG_T;
SELECT F.NUM_FEC INTO C
FROM JUGADORES J,PARTIDOS P,FECHAS F
WHERE J.ID_JUG=:NEW.ID_JUG_T
AND P.NUM_PAR =:NEW.NUM_PAR_J
AND P.NUM_FEC_P=F.NUM_FEC;
IF C=B THEN
RAISE ERROR;
END IF;
END IF;
UPDATE JUGADORES
SET SALIO ='TITULAR'
, NUM_TAR=0
WHERE ID_JUG=:NEW.ID_JUG_T;
EXCEPTION
WHEN ERROR THEN
RAISE_APPLICATION_ERROR(-20001,'ESE JUGADOR TIENE UN PARTIDO DE
SUSPENCION');
WHEN ERROR1 THEN
RAISE_APPLICATION_ERROR(-20002,'ESE JUGADOR NO PERTENECE A ESE
PARTIDO');
END;
.
/
***************************************************************************
************
CREATE OR REPLACE TRIGGER CONT_SUPLENTES

UNIVERSIDAD TCNICA DE AMBATO


FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL PERODO
ACADMICO: OCTUBRE2015 - MARZO 2016

AFTER INSERT OR UPDATE ON SUPLENTES


FOR EACH ROW
DECLARE
A NUMBER;
ERROR EXCEPTION;
BEGIN
SELECT COUNT(ID_JUG_E) INTO A
FROM EXPULSADOS
WHERE ID_JUG_E=:NEW.ID_JUG_S
AND NUM_PAR_E=:NEW.NUM_PAR_S;
IF A >0 THEN
RAISE ERROR;
END IF;
UPDATE JUGADORES
SET SALIO ='SUPLENTE'
WHERE ID_JUG=:NEW.ID_JUG_S;
EXCEPTION
WHEN ERROR THEN
RAISE_APPLICATION_ERROR(-20001,'ESE JUGADOR TIENE UN PARTIDO DE
SUSPENCION');
END;
.
/
***************************************************************************
************
***************************************************************************
************
CREATE OR REPLACE TRIGGER CONT_SUST
AFTER INSERT ON SUSTITUCIONES
FOR EACH ROW
DECLARE
ERROR EXCEPTION; D NUMBER;
E JUGADORES.EQUI_P%TYPE;
ERROR1 EXCEPTION; E1 JUGADORES.EQUI_P%TYPE;
BEGIN
SELECT EQUI_P INTO E
FROM JUGADORES
WHERE ID_JUG=:NEW.ID_JUG_S;
SELECT EQUI_P INTO E1
FROM JUGADORES
WHERE ID_JUG=:NEW.ID_JUG_E;
SELECT COUNT(NUM_PAR) INTO D
FROM PARTIDOS
WHERE NUM_PAR=:NEW.NUM_PAR
AND( EQUI_1=E
OR EQUI_2=E)
AND( EQUI_1=E1
OR EQUI_2=E1);

UNIVERSIDAD TCNICA DE AMBATO


FACULTAD DE INGENIERA EN SISTEMAS, ELECTRNICA E INDUSTRIAL PERODO
ACADMICO: OCTUBRE2015 - MARZO 2016

IF E<>E1 THEN
RAISE ERROR;
END IF;
IF D=0 THEN
RAISE ERROR1;
END IF;
EXCEPTION
WHEN ERROR THEN
RAISE_APPLICATION_ERROR(-20002,'ESE JUGADOR NO PERTENECE A ESE
EQUIPO');
WHEN ERROR1 THEN
RAISE_APPLICATION_ERROR(-20002,'ESE JUGADOR NO PERTENECE A ESE
PARTIDO');
END;
.
/

También podría gustarte