Database Reference
In-Depth Information
Tableau 3-20 : Codage d'une contrainte OCL
Déclencheur
Jeu d'essai
INSERT INTO entreprise VALUES (2,'Air
France',90000);
INSERT INTO entreprise VALUES
(3,'Airbus',190000);
INSERT INTO employe VALUES (100,3,'Fred
','Brouard','sqlspot@gmail.com',4000);
INSERT INTO employe VALUES (101,3,'Fred
','Brouard','sqlspot@gmail.com',4000);
INSERT INTO employe VALUES (102,2,'Rudi
','Bruchez','bruchez@gmail.com',3000);
CREATE TRIGGER trg_chef_meme_entreprise
AFTER INSERT OR UPDATE OF id_chef
ON chef_de
FOR EACH ROW
DECLARE
v_id_ent_chef entreprise.id_ent%TYPE;
v_id_ent_emp entreprise.id_ent%TYPE;
BEGIN
IF NOT (:NEW.id_chef IS NULL) THEN
SELECT id_ent INTO v_id_ent_chef
FROM employe WHERE id_emp = :NEW.id_chef;
SELECT id_ent INTO v_id_ent_emp
FROM employe WHERE id_emp = :NEW.id_emp;
IF NOT (v_id_ent_chef = v_id_ent_emp) THEN
RAISE_APPLICATION_ERROR(-20101,'Le chef et
l''employe n''ont pas la meme entreprise...');
END IF;
END IF;
END;
SQL> INSERT INTO chef_de VALUES
(100,NULL);
1 row created.
SQL> INSERT INTO chef_de VALUES
(101,100);
1 row created.
SQL> INSERT INTO chef_de VALUES
(102,100);
*
ERROR at line 1:
ORA-20101: Le chef et l'employe n'ont
pas la meme entreprise...
ORA-06512: at "SOUTOU.TRG_CHEF_MEME_
ENTREPRISE", line 10
Je n'ai jamais rien compris à cette histoire de tables mutantes, limitation qui, à ma
connaissance, n'existe que chez Oracle. La norme SQL accepte qu'un déclencheur puisse
accéder à la table cible dudit déclencheur. SQL Server l'a mis en œuvre :
CREATE TRIGGER e_personne ON t_personne FOR UPDATE
AS
UPDATE t_personne SET nom = UPPER(nom)
WHERE prs_id IN (SELECT prs_id FROM inserted) -- table
comportant les données modiiées (équivalent du NEW)
GO
 
Search WWH ::




Custom Search