Problème trigger sur plusieurs tables
Bonjour, voila j'ai un problème avec un trigger que j'essaie de faire depuis deux jours. En fait j'ai 3 tables : serveurs, commande et affecter. J'ai un champ compteur dans la table serveur qui doit s'incrémenter/décrémenter quand celui-ci est affecté à une commande mais je bloque un peu.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
create or replace trigger compte_commande after
insert or delete on serveurs
for each row
begin
if deleting then
SELECT compteur
INTO :old.compteur - 1
FROM serveurs;
elsif inserting then
SELECT compteur
INTO :old.compteur + 1
FROM serveurs;
end if;
end; |
le déclencheur se crée mais avec des erreurs de compilations :
L 3 et L 7 : Statement ignored
L4 et L 8 : mot clé FROM absent à l'emplacement prévu
Merci de votre aide :ccool:
probleme triggers plusieurs table
merci pour ton exemple Waldar qui est très bien expliqué mais en fait j'avais simplifié la chose pour comprendre.
J'ai 4 tables : serveurs avec idserveur (clé primaire)
table avec idtable (clé primaire)
affecter (association) avec idserveur et id table (2 clé primaire)
et commande avec idcommande (clé primaire) et idtable (clé secondaire)
donc en fait la question est plus sur le fait de comment fonctionne un trigger avec plusieurs tables ?
nouvel essai qui ne marche pas
Voila j'ai essayé autre chose mais le déclencheur se crée mais à l'éxécution il me dit que la table commande est en mutation ???
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
create or replace trigger compte before
insert or update or delete on commandes
for each row
declare
sens integer;
idserv serveurs.idserveur%type;
begin
select s.idserveur
into idserv
from commandes c,les_tables t,affecter a,serveurs s
where c.idtable = t.idtable
and t.idtable = a.idtable
and a.idserveur = s.idserveur
and a.idtable = :new.idtable
and a.dateaffectation = :new.date_enregistrement;
if inserting then
sens := +1 ;
else
sens := -1;
end if;
update serveurs s
set s.compteur = s.compteur + sens
where idserveur = idserv;
end; |