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 :

[FB3] Bug bizarre dans la création d'un trigger


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut [FB3] Bug bizarre dans la création d'un trigger
    bonjour
    j'ai fais un petit erreur en créant un trigger:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SET TERM !! ;
    CREATE TRIGGER PARAMS_NORMES_BI FOR PARAMS_NORMES
    ACTIVE BEFORE INSERT POSITION 0
    AS
    BEGIN
      IF (NEW.ID IS NULL) THEN
        NEW.ID =  new.ID=GEN_ID(GEN_PARAMETRE,1);
    END!!
    SET TERM ; !!
    le trigger se crée, bien sûr le champs ID ne ce rempli pas,
    j'ai FB3,
    est ce normal, ou un bug??
    merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 596
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Déjà il y a une erreur dans le trigger, deux fois NEW.ID

    Je n'ai trouvé aucune erreur de ce type dans FB3 voici un trigger que j'utilise (généré quasi automatiquement avec FlameRobin)
    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
     
    SET TERM ^ ;
    ALTER TRIGGER ACHEMINEMENT_BI ACTIVE
    BEFORE INSERT POSITION 0
    AS
    DECLARE VARIABLE tmp DECIMAL(18,0);
    BEGIN
      IF (NEW.ID_PARAM IS NULL) THEN
        NEW.ID_PARAM = GEN_ID(ID_PARAMETRES, 1);
      ELSE
      BEGIN
        tmp = GEN_ID(ID_PARAMETRES, 0);
        if (tmp < new.ID_PARAM) then
          tmp = GEN_ID(ID_PARAMETRES, new.ID_PARAM-tmp);
      END
    END^
    SET TERM ; ^

  3. #3
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    Déjà il y a une erreur dans le trigger, deux fois NEW.ID

    Je n'ai trouvé aucune erreur de ce type dans FB3 voici un trigger que j'utilise (généré quasi automatiquement avec FlameRobin)
    bonjour
    j'utilise moi aussi FlameRobin pour crée mes trigger, mais je le modifie, surtout je supprime cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        tmp = GEN_ID(ID_PARAMETRES, 0);
        if (tmp < new.ID_PARAM) then
          tmp = GEN_ID(ID_PARAMETRES, new.ID_PARAM-tmp);
      END
    je sais qu'il y a deux fois NEW.ID, mais firebird ne réclame pas d'erreur, c'est ma question, est ce "normal" ou bug?
    merci

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 596
    Billets dans le blog
    65
    Par défaut
    AMHA avec
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
     NEW.ID =  new.ID=GEN_ID(GEN_PARAMETRE,1);
    on obtient un Boolean a priori False

  5. #5
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    AMHA avec
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
     NEW.ID =  new.ID=GEN_ID(GEN_PARAMETRE,1);
    on obtient un Boolean a priori False
    j'ai modifier mon trigger:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SET TERM ^ ;
    alter TRIGGER PARAMS_NORMES_BI
    AS
    declare variable x int;
    BEGIN
      IF (NEW.ID IS NULL) THEN
        NEW.ID =NEW.ID=GEN_ID(GEN_PARAMETRE,1);
      IF (NEW.ID IS NULL) THEN
        new.ID=-GEN_ID(GEN_PARAMETRE,1);
    END^
    SET TERM ; ^
    alors ID à reçu une valeur négatif


    [EDIT]
    je crois que tu as vu juste, ce code marche et me donne une valeur négatif:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SET TERM ^ ;
    alter TRIGGER PARAMS_NORMES_BI
    AS
    declare variable x int;
    declare variable b boolean;
    BEGIN
      b=true;
      IF (NEW.ID IS NULL) THEN
        b =coalesce(NEW.ID,0) =GEN_ID(GEN_PARAMETRE,1);
      IF (b=false) THEN
        new.ID=-GEN_ID(GEN_PARAMETRE,1);
    END^
    SET TERM ; ^
    sans coalesce la valeur de b =null
    merci, je met résolu

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 596
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    la logique m'échappe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     IF (NEW.ID IS NULL) THEN
        b =coalesce(NEW.ID,0) =GEN_ID(GEN_PARAMETRE,1);
    // coalesce inutile puisque new.ID est déjà testé et considéré null
    autant écrire b= GEN_ID(GEN_PARAMETRE,1)=0 et on le sait ce sera toujours faux donc IF (NEW.ID IS NULL) THEN b=False; IF (b=false) THEN new.ID=-GEN_ID(GEN_PARAMETRE,1); // Pourquoi demander une valeur négative ?

    le tout revenant, si l'on veut des valeurs négatives, à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF (NEW.ID IS NULL) THEN NEW.ID=-GEN_ID(GEN_PARAMETRE,1);

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

Discussions similaires

  1. Bug longueur dans la création d'un gif
    Par Thomasgeo dans le forum Images
    Réponses: 1
    Dernier message: 27/06/2019, 14h16
  2. Problème dans la création d'un trigger
    Par khaledinformaticien dans le forum PL/SQL
    Réponses: 8
    Dernier message: 02/12/2015, 14h15
  3. [10g] Erreur dans la création d'un trigger
    Par aminenafdou dans le forum PL/SQL
    Réponses: 5
    Dernier message: 24/12/2013, 11h38
  4. [XL-2007] Bug dans la création d'une Mise en Forme Conditionnelle
    Par pastis.vi dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/06/2013, 08h44
  5. Bug bizarre dans java.util.regexp
    Par LodeRunner64 dans le forum Collection et Stream
    Réponses: 0
    Dernier message: 20/05/2009, 16h05

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