You are on page 1of 4

Wong Leon, Eduardo Rodrigo

TAREA TRIGGERS – BASE DE DATOS 2


EJERCICIO #1
CREATE OR REPLACE TRIGGER TG01
BEFORE INSERT ON NOTAS
FOR EACH ROW
DECLARE
R1 INT;
R2 INT;
BEGIN
SELECT COUNT(*) INTO R1 FROM CURSO WHERE IDCURSO=:NEW.IDCURSO;
SELECT COUNT(*) INTO R2 FROM ALUMNO WHERE IDALUMNO=:NEW.IDALUMNO;
IF R1=0 AND R2!=0 THEN
RAISE_APPLICATION_ERROR(-20001,'CODIGO DE CURSO '||:NEW.IDCURSO|| ' NO
EXISTE ');
END IF;
IF R2=0 AND R1!=0 THEN
RAISE_APPLICATION_ERROR(-20001,'CODIGO DE ALUMNO '||:NEW.IDALUMNO|| '
NO EXISTE ');
END IF;
IF R1=0 AND R2=0 THEN
RAISE_APPLICATION_ERROR(-20001,'CODIGO DE CURSO '||:NEW.IDCURSO|| ' NO
EXISTE. CODIGO DE ALUMNO '||:NEW.IDALUMNO|| ' NO EXISTE.');
END IF;
END;

EJERCICIO #2
CREATE OR REPLACE TRIGGER TG02
BEFORE DELETE ON ALUMNO
FOR EACH ROW
DECLARE
CURSOS INT;
NOMBRE CHAR;
BEGIN
SELECT COUNT(*) INTO CURSOS FROM NOTAS WHERE IDALUMNO=:OLD.IDALUMNO;
IF CURSOS!=0 THEN
RAISE_APPLICATION_ERROR(-20002,'EL ALUMNO '||UPPER(:OLD.NOMALUMNO||'
'||:OLD.APEALUMNO)||' NO PUEDE ELIMINARSE PORQUE TIENE NOTAS EN '||
CURSOS||' CURSOS');
END IF;
END;

EJERCICIO #3
CREATE TABLE ALUMNOS_TEMP (
IdAlumno char(5) NOT NULL primary key,
ApeAlumno varchar2(30) NOT NULL,
NomAlumno varchar2(30) NOT NULL,
Idesp char(3) NOT NULL,
PROCE CHAR(1)
);
CREATE OR REPLACE TRIGGER TGC03
BEFORE INSERT ON ALUMNO
FOR EACH ROW
DECLARE
A INT;
NOMBRE ESPECIALIDAD.NOMESP%TYPE;
BEGIN
SELECT COUNT(*) INTO A FROM ALUMNO WHERE IDESP=:NEW.IDESP;
IF A+1>20 THEN
SELECT NOMESP INTO NOMBRE FROM ESPECIALIDAD WHERE IDESP=:NEW.IDESP;
INSERT INTO ALUMNOS_TEMP VALUES
(:NEW.IDALUMNO,:NEW.APEALUMNO,:NEW.NOMALUMNO,:NEW.IDESP,:NEW.PROCE);
RAISE_APPLICATION_ERROR(-20006,'EL ALUMNO '||:NEW.NOMALUMNO|| ' NO
PUEDE INSERTARSE POR HABER LLEGADO AL MÁXIMO PERMITIDO POR LA CARRERA
'||NOMBRE);
END IF;
END;

EJERCICIO #4
CREATE OR REPLACE TRIGGER TG04
BEFORE INSERT ON NOTAS
FOR EACH ROW
DECLARE
BEGIN
IF :NEW.P1<0 OR :NEW.P1>20 THEN
RAISE_APPLICATION_ERROR(-20003,'EL numero '||:NEW.P1|| ' no se puede
guardar');
END IF;
IF :NEW.P2<0 OR :NEW.P2>20 THEN
RAISE_APPLICATION_ERROR(-20003,'EL numero '||:NEW.P2|| ' no se puede
guardar');
END IF;
END;

EJERCICIO #5
SELECT TO_CHAR(SYSDATE,'HH24') FROM DUAL;
CREATE OR REPLACE TRIGGER TG05
BEFORE INSERT ON FAC_DETA
BEGIN
IF TO_CHAR(SYSDATE,'HH24')=13 THEN
RAISE_APPLICATION_ERROR(-20002,'HORARIO DE REFRIGERIO');
END IF;
END;

EJERCICIO #6
CREATE OR REPLACE TRIGGER TG06
BEFORE INSERT ON ALUMNO
FOR EACH ROW
BEGIN
IF :NEW.IDALUMNO=:OLD.IDALUMNO THEN
RAISE_APPLICATION_ERROR(-20002,'NO SE PERMITE LA DUPLICACION DE UN
CODIGO');
END IF;
END;

EJERCICIO #7
CREATE OR REPLACE TRIGGER TG07
BEFORE UPDATE ON NOTAS
BEGIN
IF UPDATING('P1') THEN
RAISE_APPLICATION_ERROR(-20003,'NO SE PUEDE ACTUALIZAR LA NOTA DEL
P1');
END IF;
IF UPDATING('P2') THEN
RAISE_APPLICATION_ERROR(-20004,'NO SE PUEDE ACTUALIZAR LA NOTA DEL
P2');
END IF;
END;

SELECT*FROM NOTAS;
UPDATE NOTAS SET P1=15 WHERE IDALUMNO='A0003';

You might also like