- On dispose d'une relation employe(emp_id, emp_nom, emp_salaire, emp_manager, emp_embauche, emp_service) :
create table employe(
emp_id number(4,0),
emp_nom varchar2(10),
emp_job varchar2(9),
emp_manager number(4,0),
emp_embauche date,
emp_salaire number(7,2),
emp_serv number(2,0),
constraint pk_employe primary key (emp_id),
constraint fk_serv foreign key (emp_serv) references service (serv_id),
constraint fk_mngr foreign key (emp_manager) references employe(emp_id)
);
- Pour mémoriser l'évolution salariale des employés, on crée une table trace_salaire(emp_id, old_sal, new_sal, date_sal, typeChgt) :
CREATE TABLE trace_salaire (
emp_id number(4,0),
old_sal number(7,2),
new_sal number(7,2),
date_sal date,
typeChgt VARCHAR(8) CHECK (typeChgt IN ('NOUVEAU', 'MODIFIE', 'SUPPRIME')),
foreign key (emp_id) references employe
);
- La table trace_salaire est alimenté par un trigger dès que le contenur de la table employé change :;
CREATE OR REPLACE TRIGGER trig_trace_salaire
AFTER INSERT OR UPDATE OR DELETE ON emp
FOR EACH ROW
DECLARE
quand DATE := SYSDATE;
BEGIN
IF INSERTING THEN
INSERT INTO trace_salaire
VALUES (:new.empno,null,:new.sal,quand,'NOUVEAU');
ELSIF UPDATING('SAL') THEN
INSERT INTO trace_salaire
VALUES (:old.empno,:old.sal,:new.sal,quand,'MODIFIE');
ELSIF DELETING THEN
INSERT INTO trace_salaire
VALUES (:old.empno,:old.sal,null,quand,'SUPPRIME');
END IF;
END;