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 :

Erreur sur requête


Sujet :

SQL Firebird

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2010
    Messages
    668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2010
    Messages : 668
    Points : 197
    Points
    197
    Par défaut Erreur sur requête
    Bonjour à tous,

    j'ai une erreur sur une requete sql avec ce message d'erreur "integer overflow the result of an integer operation caused the most significate bit of the result to carry at 'trigger FDT'".

    J'ai compris que c'est un depassement de capacité champs par contre je ne sais pas comment faire un "try except" dans un trigger.

  2. #2
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    mars 2003
    Messages
    3 783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : mars 2003
    Messages : 3 783
    Points : 5 798
    Points
    5 798
    Par défaut
    Hello,

    Un petit tour par cette page pourra peut-être t'aider : https://firebirdsql.org/file/documen...ef25-psql-when
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2010
    Messages
    668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2010
    Messages : 668
    Points : 197
    Points
    197
    Par défaut
    bonjour,

    j'ai vu le lien mais sa répond pas vraiment à ce que je souhaite. En effet, mon probléme c'est que j'ai dans un trigger "BEFORE INSERT OR UPDATE " un champs qui reçoit des données aléatoirement c'est pour ça que je veut mettre une exception pour qu'il mette le champs=0
    comme ceci
    try new.champ1=new.champ2*new.champ3; except new.champ1=0;

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    11 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 11 017
    Points : 28 024
    Points
    28 024
    Billets dans le blog
    27
    Par défaut
    Bonjour,

    Et si vous commenciez par nous fournir le code de ce trigger et, tant qu'à faire le code erreur pour ne pas avoir à le chercher nous même ?
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  5. #5
    Expert éminent sénior

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    5 000
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 5 000
    Points : 14 312
    Points
    14 312
    Billets dans le blog
    1
    Par défaut
    Peut être tout simplement une colonne marquée "null", auquel cas "COALESCE" résoudra le problème
    Mais effectivement, fournir les requêtes et le diagnostic est la moindre des choses

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2010
    Messages
    668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2010
    Messages : 668
    Points : 197
    Points
    197
    Par défaut
    Bonjour,
    voici le 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
    22
    SET TERM ^ ;
     
    CREATE TRIGGER STK_BIU0 
    FOR STK ACTIVE
    BEFORE INSERT OR UPDATE POSITION 0
     
    AS 
    BEGIN 
     
    IF (NEW.DES IS null) then 
     
    NEW.DES='.';	
     
    IF (NEW.DAT IS null) then 
     
           NEW.DAT=current_date;
    IF (new.mon is null) then
     
    new.mon=CAST(new.QTR*new.PUA as numeric(14,2));  ///erreur ici sachant que QTR=numeric(14,5), PUA=numeric(14,5),mon=numeric(14,5)  
    END^
     
    SET TERM ; ^

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    11 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 11 017
    Points : 28 024
    Points
    28 024
    Billets dans le blog
    27
    Par défaut
    Bonjour
    Vous nous avez toujours pas indiqué le code erreur mais plusieurs choses m'interpellent
    1. new.QTR et new.PUA peuvent être NULL donc un petit COALESCE ne serait pas de trop CAST(COALESCE(new.QTR,0.0)*COALESCE(new.PUA,0.0) as numeric(14,2))
    2. Plutôt qu'un COALESCE il serait peut-être bon de le faire en amont
      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
      SET TERM ^ ;
       
      CREATE TRIGGER STK_BIU0 
      FOR STK ACTIVE
      BEFORE INSERT OR UPDATE POSITION 0
      AS 
      BEGIN 
      IF (NEW.DES IS null) then NEW.DES='.';	
      IF (NEW.DAT IS null) then   NEW.DAT=current_date;
      IF (new.QTR IS NULL) THEN NEW.QTR=0.00;
      IF (new.PUA IS NULL) THEN NEW.PUA=0.00;
      IF (new.mon is null) then new.mon=CAST(new.QTR*new.PUA as numeric(14,2));   
      END^
       
      SET TERM ; ^
    3. Si La colonne mon est numeric(14,5) pourquoi faites-vous un CAST AS NUMERIC(14,2) ?
    4. Pourquoi stockez-vous une colonne (mon) calculée (COMPUTED BY) ?
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2010
    Messages
    668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2010
    Messages : 668
    Points : 197
    Points
    197
    Par défaut
    Bonjour
    Vous nous avez toujours pas indiqué le code erreur
    je l'ai indiqué depuis le début!
    new.QTR et new.PUA
    ces 2 champs ne peuvent jamais être null, ils ont au pire une valeur par défaut.

    Si La colonne mon est numeric(14,5) pourquoi faites-vous un CAST AS NUMERIC(14,2) ?
    non, mon est NUMERIC(14,2)

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    11 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 11 017
    Points : 28 024
    Points
    28 024
    Billets dans le blog
    27
    Par défaut
    Bonjour,
    Citation Envoyé par chekkal Voir le message

    Vous nous avez toujours pas indiqué le code erreur
    je l'ai indiqué depuis le début!
    Non, vous nous avez indiqué le texte de l'erreur. Chaque erreur est aussi indiqué par un numéro (GDSCODE) c'est ec dernier que je demandais, vous ne croyez quand même pas que je vais aller faire cette recherche ?

    Ces 2 champs ne peuvent jamais être null, ils ont au pire une valeur par défaut.
    j'ai un principe il faut toujours appliquer la loi de Murphy : "tout ce qui peux foirer le fera". Avez-vous essayé avec mes préconisations avant de les rejeter ? Bien sûr j'ai proposé 0.00 mais tout autre valeur par défaut serait acceptable, d'ailleurs ces valeurs sont-elles indiquées (et correctement) dans le DML ?


    non, mon est NUMERIC(14,2)
    ce n'est pas ce que vous indiquez dans votre code de trigger
    ///erreur ici sachant que QTR=numeric(14,5), PUA=numeric(14,5),mon=numeric(14,5)
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  10. #10
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2010
    Messages
    668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2010
    Messages : 668
    Points : 197
    Points
    197
    Par défaut
    Bonjour,

    Désolé pour l’ambiguïté. Je vous remercie pour les conseils sur la structure et les contrôles a faire sur la base de données, soyez certains que je prendrais en considération la prochaine fois. Cependant, ma question est toutes simple, peut on introduire un code d'exception dans un trigger comme avec programmation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    try code1 except  code2 end

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    11 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 11 017
    Points : 28 024
    Points
    28 024
    Billets dans le blog
    27
    Par défaut
    Citation Envoyé par chekkal Voir le message
    Ma question est toute simple, peut-on introduire un code d'exception dans trigger
    Oui et QI130 vous l'a déjà indiqué il existe le WHEN .. DO
    C'est pour cette raison que je vous demandais le code de l'erreur pour pouvoir l'écrire

    Pour une gestion "fine" de l'erreur WHEN GDSCODE 335544779 DO BEGIN ... ENDPour une gestion plus "globale" WHEN SQLCODE -901 DO BEGIN ...ENDau cas où voulez traiter (gestion générale) tout type d'erreur WHEN ANY DO BEGIN ... ENDMais attention aux portées de cette gestion d'exception. En gros, on met ce code en fin de bloc et cette gestion est valable pour tout le bloc. Ce n'est donc pas la même chose qu'en programmation Delphi.


    par exemple
    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
    22
    23
    SET TERM ^ ;
     
    CREATE TRIGGER STK_BIU0 
    FOR STK ACTIVE
    BEFORE INSERT OR UPDATE POSITION 0
     
    AS 
    BEGIN 
     
    IF (NEW.DES IS null) then 
     
    NEW.DES='.';	
     
    IF (NEW.DAT IS null) then 
     
           NEW.DAT=current_date;
    IF (new.mon is null) then
     
    new.mon=CAST(new.QTR*new.PUA as numeric(14,2)); 
    WHEN ANY DO new.mon=0.00; 
    END^
     
    SET TERM ; ^
    c'est une très mauvaise gestion de l'erreur mais "c'est vous qui voyez"
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  12. #12
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2010
    Messages
    668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2010
    Messages : 668
    Points : 197
    Points
    197
    Par défaut
    Bonjour,
    C'est bien ce que je cherche merci. cependant l'exception est pour le trigger complet et pas pour une opérations spécifique dans le trigger.

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

Discussions similaires

  1. [SQL] erreur sur requête insert
    Par temperature dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/01/2008, 16h27
  2. [MySQL] problème d'erreur sur requête
    Par bromlecornu dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 30/05/2007, 17h45
  3. Message d'erreur sur requête suppression
    Par bouba_95 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 23/05/2007, 12h58
  4. Erreur sur Requête Mise à Jour
    Par guenfood dans le forum Access
    Réponses: 1
    Dernier message: 06/06/2006, 09h51
  5. Erreur sur requête
    Par zut94 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/04/2006, 11h23

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