--1
CREATE TABLE T_AUXILIAR (NUM_EMPLE SMALLINT);
CREATE TRIGGER EJ1 FOR EMPLE
AFTER UPDATE
AS
BEGIN
INSERT INTO T_AUXILIAR (NUM_EMPLE) VALUES (NEW.EMP_NO);
END
--2
CREATE TABLE AUDITAREMPLE (FECHA DATE, HORA TIME, NUM_EMPLE SMALLINT, SALARIO_ANT INTEGER, SALARIO_POS INTEGER);
CREATE TRIGGER EJ2 FOR EMPLE
AFTER UPDATE
AS
DECLARE SAL NUMERIC(6,2);
BEGIN
SAL = OLD.SALARIO * 1.05;
IF (NEW.SALARIO > SAL) THEN
INSERT INTO AUDITAREMPLE (FECHA, HORA, NUM_EMPLE, SALARIO_ANT, SALARIO_POS) VALUES (CURRENT_DATE, CURRENT_TIME, NEW.EMP_NO, OLD.SALARIO, NEW.SALARIO);
END
--3
CREATE TABLE AUDITAREMPLE (OPERACION VARCHAR(20), FECHA DATE, HORA TIME, NUM_EMPLE SMALLINT, APELLIDO VARCHAR(10));
CREATE TRIGGER EJ3 FOR EMPLE
AFTER INSERT OR DELETE
AS
BEGIN
IF (DELETING) THEN
INSERT INTO AUDITAREMPLE (OPERACION, FECHA, HORA, NUM_EMPLE, APELLIDO) VALUES ('DELETE', CURRENT_DATE, CURRENT_TIME, NEW.EMP_NO, NEW.APELLIDO);
ELSE
INSERT INTO AUDITAREMPLE (OPERACION, FECHA, HORA, NUM_EMPLE, APELLIDO) VALUES ('INSERT', CURRENT_DATE, CURRENT_TIME, NEW.EMP_NO, NEW.APELLIDO);
END
--4
CREATE TABLE CONTROL_CONEXIONES (USUARIO VARCHAR(30), FECHA_HORA DATE);
CREATE TRIGGER EJ4 ON CONNECT
AS
BEGIN
INSERT INTO CONTROL_CONEXIONES (USUARIO, FECHA_HORA) VALUES (CURRENT_USER, CURRENT_TIMESTAMP);
END
--5
CREATE EXCEPTION DEPT_NOEXISTENTE 'El departamento no existe';
CREATE TRIGGER EJ5 FOR EMPLE
BEFORE INSERT
AS
BEGIN
IF (NEW.DEPT_NO NOT IN (SELECT DEPT_NO FROM DEPART)) THEN
EXCEPTION DEPT_NOEXISTENTE;
END
--6
CREATE EXCEPTION FECHA_NOVALIDA 'La fecha introducida no es valida';
CREATE TRIGGER EJ6 FOR EMPLE
BEFORE INSERT OR UPDATE
AS
BEGIN
IF (NEW.FECHA_ALT <= CURRENT_DATE) THEN
NEW.COMISION = 0;
ELSE
EXCEPTION FECHA_NOVALIDA;
END
--7
CREATE EXCEPTION USUARIO_EXISTENTE 'El usuario ya existe';
CREATE TRIGGER EJ7 FOR EMPLE
BEFORE INSERT
AS
BEGIN
IF (NEW.EMP_NO IN (SELECT EMP_NO FROM EMPLE)) THEN
EXCEPTION USUARIO_EXISTENTE;
END
--8
CREATE TABLE CONTROL_CONEXIONES (EVENTO VARCHAR(30), USUARIO VARCHAR(30), FECHA_HORA DATE);
CREATE TRIGGER EJ8 ON DISCONNECT
AS
BEGIN
INSERT INTO CONTROL_CONEXIONES (EVENTO, USUARIO, FECHA_HORA) VALUES ('DISCONNECT', CURRENT_USER, CURRENT_TIMESTAMP);
END
--9
CREATE EXCEPTION NUM_EMPLE_NOVALIDO 'El numero de empleado no es valido';
CREATE TRIGGER EJ9 FOR EMPLE
BEFORE INSERT
AS
BEGIN
IF ((SELECT COUNT(EMP_NO) FROM EMPLE WHERE DEPT_NO = NEW.DEPT_NO) >= 15) THEN
EXCEPTION NUM_EMPLE_NOVALIDO;
END
--10
CREATE TABLE AUDITAR_EMPLE (OPERACION VARCHAR(20), USUARIO VARCHAR(30), FECHA_HORA DATE, NUM_EMPLE SMALLINT);
CREATE TRIGGER EJ10 FOR EMPLE
AFTER INSERT OR UPDATE OR DELETE
AS
BEGIN
IF (INSERTING) THEN
INSERT INTO AUDITAR_EMPLE (OPERACION, USUARIO, FECHA_HORA, NUM_EMPLE) VALUES ('INSERT', CURRENT_USER, CURRENT_TIMESTAMP, NEW.EMP_NO);
IF (UPDATING) THEN
INSERT INTO AUDITAR_EMPLE (OPERACION, USUARIO, FECHA_HORA, NUM_EMPLE) VALUES ('UPDATE', CURRENT_USER, CURRENT_TIMESTAMP, NEW.EMP_NO);
IF (DELETING) THEN
INSERT INTO AUDITAR_EMPLE (OPERACION, USUARIO, FECHA_HORA, NUM_EMPLE) VALUES ('DELETE', CURRENT_USER, CURRENT_TIMESTAMP, NEW.EMP_NO);
END