IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Firebird Discussion :

Pb Trigger : champ OLD inconnu


Sujet :

SQL Firebird

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Points : 67
    Points
    67
    Par défaut Pb Trigger : champ OLD inconnu
    Bonjour,

    J'ai un petit problème avec mon trigger...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    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.

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Points : 67
    Points
    67
    Par défaut
    Bonjour,

    Encore une fois merci Claudius40...

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

    Cyril

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par cgone
    Si tu passes au Brésil, téléphone moi et on se fait une bouffe...
    Promis, juré

    @+ Claudius

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Passer un champ OLD/NEW d'un trigger à une procédure
    Par Nico128 dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 08/01/2014, 01h50
  2. [MySQL] Champ 'Kaskroot' inconnu dans where clause
    Par visqueu dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/11/2010, 13h50
  3. [XI][VS2005]Ce nom de champ est inconnu
    Par neo.51 dans le forum SDK
    Réponses: 1
    Dernier message: 30/10/2007, 15h25
  4. trigger champ pas mis à jour
    Par Magohamoths dans le forum Développement
    Réponses: 2
    Dernier message: 06/10/2006, 09h45
  5. [MySQL] Champ 'NbPoints' inconnu dans field list
    Par ouiffi dans le forum Langage SQL
    Réponses: 7
    Dernier message: 03/07/2006, 08h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo