Professional Documents
Culture Documents
Tarea Triggers - Base de Datos 2: Ejercicio #1
Tarea Triggers - Base de Datos 2: Ejercicio #1
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';