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

InterBase Discussion :

TRIGGERS - String truncation ou numeric overflow


Sujet :

InterBase

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2002
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 17
    Points : 18
    Points
    18
    Par défaut TRIGGERS - String truncation ou numeric overflow
    J'ai créé des triggers d'update sur IB 6 (version open source).
    Sur plusieurs dizaines de tables, ce type trigger marche, mais pas sur mes trois plus grandes tables.
    J'aimerais savoir si les triggers sont limités en taille, ou alors les concaténations de chaînes de type varchar.
    En effet, à l'exécution du trigger, lorsque je fais un update sur ma table, j'ai un string truncation.

    Voici le code de mon trigger.

    Note : TRIM2 et QUOTEDSTR sont deux UDFs fournies par défaut par interbase.

    Voilà, si quelqu'un peut m'aider, merci, sinon, tant pis !

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    CREATE TRIGGER UTILISATEUR_UPDATE FOR UTILISATEUR
    ACTIVE BEFORE UPDATE POSITION 0
    AS
    BEGIN
    INSERT INTO REPLICATION VALUES(
    GEN_ID(MON_GEN,1),
    'UPDATE UTILISATEUR SET UTILISATEUR_NUM=
    '||TRIM2(NEW.UTILISATEUR_NUM)||',FONCTION_NUM=
    '||TRIM2(NEW.FONCTION_NUM)||',UTILISATEUR_NOM=
    '||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_NOM))||',UTILISATEUR_PRENOM=
    '||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_PRENOM))||',UTILISATEUR_ADR_VILLE=
    '||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_ADR_VILLE))||',UTILISATEUR_ADR1=
    '||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_ADR1))||',UTILISATEUR_ADR2=
    '||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_ADR2))||',UTILISATEUR_CODE_POSTAL=
    '||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_CODE_POSTAL))||',UTILISATEUR_PAYS=
    '||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_PAYS))||',UTILISATEUR_MAIL_PRO=
    '||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_MAIL_PRO))||',UTILISATEUR_TEL_PRO=
    '||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_TEL_PRO))||',UTILISATEUR_MOBILE_PRO=
    '||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_MOBILE_PRO))||',UTILISATEUR_FAX_PRO=
    '||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_FAX_PRO))||',UTILISATEUR_MAIL_PERSO=
    '||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_MAIL_PERSO))||',UTILISATEUR_TEL_PERSO=
    '||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_TEL_PERSO))||',UTILISATEUR_MOBILE_PERSO=
    '||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_MOBILE_PERSO))||',UTILISATEUR_FAX_PERSO=
    '||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_FAX_PERSO))||',UTILISATEUR_DATE_CREATION=
    '||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_DATE_CREATION))||',UTILISATEUR_DATE_MODIF=
    '||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_DATE_MODIF))||',UTILISATEUR_NOTES=
    '||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_NOTES))||',TITRE_NUM=
    '||TRIM2(NEW.TITRE_NUM)||',UTILISATEUR_SEXE=
    '||TRIM2(NEW.UTILISATEUR_SEXE)||',UTILISATEUR_LOGIN=
    '||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_LOGIN))||',UTILISATEUR_PASSWORD=
    '||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_PASSWORD))||',PROFIL_NUM=
    '||TRIM2(NEW.PROFIL_NUM)||
    'WHERE UTILISATEUR_NUM='||Old.UTILISATEUR_NUM);
    end
    Edité par Barbibulle : merci de mettre le code entre les balises code, celà le rend plus lisible et donc sera plus attrayant. sinon tant pis...

  2. #2
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Ce message d'erreur arrive en général quand on essaye d'affecter une chaine plus grande que ce que peux contenir la colonne.

    Dans votre table REPLICATION combien fait la colonne varchar ?
    Pour plus de sécurité (mais avec le risque d'enregister qu'une partie de l'information) vous pouvez coupper à la valeur max de votre varchar la chaine affecté.

    Sinon celà peux provenir également de vos UDF car en entrée elle accepent un varchar d'une certaine longueur et donc si vous essayez de lui envoyer plus vous aurez ce message...

    Donc vérifiez la déclaration de vos deux fonctions UDF pour voir sir celà ne vient pas de ça non plus.

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2002
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 17
    Points : 18
    Points
    18
    Par défaut [résolution partielle ] pb String truncation dans triggers
    Vous avez entièrement raison.
    Je me suis rendu compte que ma table réplication est suffisamment grande (5000 caractères).
    Ma déclaration d'udf est également suffisamment grande.
    Par contre, ça doit venir du fait que j'utilise un PChar, que doit on utiliser comme type de chaîne. Parce que je viens de me rendre compte que ça ne marche pas quand ça dépasse 256 caractères.

    En tout cas, merci pour votre réponse qui m'a bien aiguillé.

  4. #4
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut Re: [résolution partielle ] pb String truncation dans trigge
    Citation Envoyé par AlBoLeToNo
    Par contre, ça doit venir du fait que j'utilise un PChar, que doit on utiliser comme type de chaîne. Parce que je viens de me rendre compte que ça ne marche pas quand ça dépasse 256 caractères.
    de quel PCHAR parlez vous ? C'est dans votre programme que ca ne fonctionne pas et non dans le trigger ?

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2002
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 17
    Points : 18
    Points
    18
    Par défaut [résolu] String truncation
    Oui en fait, dans mon écriture de l'udf, j'avais une fonction qui prenait un cstring 5000. Ca, c'était bon. Mais par contre, derrière, j'avais codé une DLL qui prenait un PChar en paramètre !!! Soit pas plus de 256 !
    J'ai donc remplacé le PChar par un array [1..5001] et tout va bien !!!
    Ouf !
    Je suis vraiment nul !
    Merci beaucoup en tout cas !

  6. #6
    Membre actif Avatar de TMuet
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2003
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 225
    Points : 288
    Points
    288
    Par défaut Re: [résolu] String truncation
    Citation Envoyé par AlBoLeToNo
    PChar en paramètre !!! Soit pas plus de 256 !
    Je suis vraiment nul !


    Un PChar n'a pas à proprement parler de taille, sinon celle nécessaire dans l'OS pour allouer un pointeur ; car un PChar est bel et bien un pointeur

    Il ne fait donc pas 256 ou 5000, il fait 4 en XP-32 bits et pas 1 de plus.
    Par contre, il se peut qu'il pointe sur une zone de taille 256 ou 5000

    Mais en tous cas, un PChar ne peut être la cause du problème de taille dont tu parles.

Discussions similaires

  1. Error ORA-01426: numeric overflow
    Par evilnet dans le forum Oracle
    Réponses: 1
    Dernier message: 22/08/2012, 14h49
  2. arithmetic exception,numeric overflow ..
    Par makaphrodite dans le forum InterBase
    Réponses: 1
    Dernier message: 06/12/2008, 20h06
  3. String Truncation dans Procédure
    Par JP.NUAGE dans le forum Langage
    Réponses: 2
    Dernier message: 16/10/2008, 17h54
  4. Réponses: 5
    Dernier message: 25/02/2008, 22h28
  5. String truncated
    Par mrttlemonde dans le forum C
    Réponses: 5
    Dernier message: 22/03/2006, 08h49

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