Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/11/2006, 03h20   #1
Nouveau Membre du Club
 
Inscription : juillet 2002
Messages : 84
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 84
Points : 35
Points : 35
Envoyer un message via MSN à cgone
Par défaut Pb Trigger : champ OLD inconnu

Bonjour,

J'ai un petit problème avec mon trigger...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SET TERM ^ ;
CREATE OR ALTER TRIGGER VERIF_CLASSE_COD_PROD FOR COD_PROD
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE NB INTEGER;
BEGIN
  IF (OLD.CLA_ID = 4) THEN
  BEGIN
    SELECT COUNT(COD_ID) FROM COD_PROD WHERE CLA_ID <> 4 AND PRO_ID = OLD.PRO_ID AND ENT_ID = OLD.ENT_ID INTO NB;
    IF (NB <> 0) THEN
       EXCEPTION INS_CODBAR_NC_ERROR;
  END
  ELSE
  BEGIN
    SELECT COUNT(COD_ID) FROM COD_PROD WHERE CLA_ID = 4 AND PRO_ID = OLD.PRO_ID AND ENT_ID = OLD.ENT_ID INTO NB;
    IF (NB <> 0) THEN
       EXCEPTION INS_CODBAR_ERROR;
  END
END;
SET TERM ^ ;
Le message d'erreur me dit: "Champ OLD inconnu" alors que ce trigger fonctionne:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
SET TERM ^ ;
CREATE OR ALTER TRIGGER VERIF_DELETE_CATEGORIA FOR CATEGORIAS
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE NB_ESPECE INTEGER;
BEGIN
  SELECT COUNT(ESP_ID) FROM ESPECIES WHERE CAT_ID = OLD.CAT_ID INTO NB_ESPECE;
IF (NB_ESPECE <> 0) THEN
   EXCEPTION DEL_CAT_ERROR_FK;
END;
SET TERM ^ ;
La seule différence est que dans le premier cas j'utilise le champ OLD en dehors de la requête...

Quelqu'un a une idée ?


Cyril
cgone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2006, 08h25   #2
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 758
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 758
Points : 6 779
Points : 6 779
Salut

On ne peut pas accéder à la valeur OLD d'un champ dans un trigger BEFORE INSERT. Ce qui est logique ! La valeur OLD de celui-ci n'existe pas encore.

Réécris ton trigger en remplacant les OLD par des NEW.

Par contre dans ton 2° trigger BEFORE DELETE là c'est OK. OLD peut être lu: Quelle était la valeur de ce champ.

Pour résumer:
Trigger INSERT: Utilisation de NEW.
Trigger UPDATE: Utilisation de NEW et OLD.
Trigger DELETE: Utilisation de OLD.

@+ Claudius.
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2006, 14h18   #3
Nouveau Membre du Club
 
Inscription : juillet 2002
Messages : 84
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 84
Points : 35
Points : 35
Envoyer un message via MSN à cgone
Bonjour,

Encore une fois merci Claudius40...

Si tu passes au Brésil, téléphone moi et on se fait une bouffe...

Cyril
cgone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2006, 14h19   #4
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 758
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 758
Points : 6 779
Points : 6 779
Citation:
Envoyé par cgone
Si tu passes au Brésil, téléphone moi et on se fait une bouffe...
Promis, juré

@+ Claudius
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h30.


 
 
 
 
Partenaires

Hébergement Web