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 :

Un mystère entre base de test et base de prod.


Sujet :

SQL Firebird

  1. #1
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 12 655
    Points : 34 153
    Points
    34 153
    Billets dans le blog
    50
    Par défaut Un mystère entre base de test et base de prod.
    Bonjour,
    Depuis hier après midi je séche sur ce sujet et peut-être me dirigerez vous vers la bonne cause.

    Le contexte :
    Lors du Brexit les conditions de dédouanement ont changées. Toujours est-il que pour nos articles (des chaussures) nos amis anglais ont de drôles d'idées, pour faire simple les chaussures de taille inférieures au 390 ne sont pas taxées considérées comme "Enfant" alors que les autres "Adultes" le sont. Une sorte de taxe sur les grands pieds ! Cela est plus complexe mais c'est le principe.
    Nos articles évidement ne sont pas séparés en fonction de ces critères sauf exception d'articles spéciaux enfant, une grille de pointure ira disons du 350 au 450 pour les adultes. Vous le comprendrez donc il me faut scinder (uniquement pour la déclaration douanière) les articles de pointures inférieures au 390 des autres (ça ce serait simple si c'était valable pour tout type d'article mais ce n'est pas tout à fait cela, entre en compte, toujours en simplifiant, l'utilisation : Danse, Danse de salon ...) de plus les douanes se fichent de la couleur ou de la taille, ce qu'ils veulent c'est la quantité totale par catégorie et utilisateur (donc beaucoup moins détaillé qu'une facture.

    Donc à ce stade j'ai fait en sorte d'ajouter deux tables :
    CUSTOMSGBMODELE (ID INTEGER PK,CATEGORIE VARCHAR(13),DESTINATION CHAR(1) ,GBDESCRIPTION BLOB TEXT) : PK ID, INDEX UNIQUE (CATEGORIE,DESTINATION)
    CUSTOMSGB_PT(ID INTEGER PK,CATEGORIE VARCHAR(13),DESTINATION,PT) PK ID, INDEX UNIQUE (CATEGORIE,PT)

    le tout est maintenant d'analyser les lignes de factures, ressortir les CATEGORIEs en fonction du modele

    en guise de test ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    CREATE TABLE LIGNES (MODELE VARCHAR(14));
    COMMIT;
    INSERT INTO LIGNES(MODELE) VALUES ('CAMBLISA');
    INSERT INTO LIGNES(MODELE) VALUES ('LISA A');
    INSERT INTO LIGNES(MODELE) VALUES ('LISA B');
    INSERT INTO LIGNES(MODELE) VALUES ('DIVA C');
    INSERT INTO LIGNES(MODELE) VALUES ('DIVA B');
     
    CREATE TABLE CUSTOMGB (MODELE VARCHAR(14),TYPEMODELE CHAR(1));
    COMMIT;
    INSERT INTO CUSTOMGB(MODELE) VALUES ('CAMBLISA');
    INSERT INTO CUSTOMGB(MODELE) VALUES ('LISA');
    INSERT INTO CUSTOMGB(MODELE) VALUES ('DIVA');
    et pour "l'analyse"
    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
    SET TERM $;
    CREATE OR ALTER PROCEDURE TEST_GB
    RETURNS 
     (M VARCHAR(14),
      MC VARCHAR(14)
     )
    AS 
    DECLARE VARIABLE I INTEGER;
    begin
    FOR SELECT MODELE FROM LIGNES INTO :M DO
     BEGIN 
       I=char_length(:M);
      -- retrouver la catégorie en fonction du MODELE
      WHILE (I>0) DO
        BEGIN
         MC=SUBSTRING(:M FROM 1 FOR :I);
         IF (EXISTS (SELECT 1 FROM CUSTOMGB WHERE MODELE=:MC)) THEN 
           BEGIN
            I=0;
            SUSPEND;
           END
         ELSE I=I-1; 
        END   
     END
    END$
     
    SET TERM ;$
    COMMIT;
    SELECT * FROM TEST_GB;
    ce qui me renvoie bien le résultat escompté
    Modele Catégorie
    CAMBLISA CAMBLISA
    LISA A LISA
    LISA B LISA
    DIVA C DIVA
    DIVA B DIVA
    Mais, et c'est là mon problème dans ma base de production (ce même test fonctionne) , mais pas à partir de "vraies" lignes de factures
    Catégorie est toujours <NULL>
    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, Sidney) 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

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 12 655
    Points : 34 153
    Points
    34 153
    Billets dans le blog
    50
    Par défaut
    Problème résolu du moins partiellement.
    Une histoire de taille qui me chagrine, dans la Base de production un VARCHAR(14) au lieu d'un VARCHAR(13). Il faut que j'investigue pour savoir si je dois réduire ou garder cette taille et où cela joue vraiment (dans la procédure ou dans les tables ?)
    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, Sidney) 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

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    6 997
    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 : 6 997
    Points : 22 089
    Points
    22 089
    Billets dans le blog
    2
    Par défaut
    Bonjour Sergio

    Un char fixe est sans doute préférable pour une dimension réduite comme celle-ci (13 ou 14 caractères).
    Il faut tenir compte de l'attribut longueur et des divers inconvénients inhérents au varchar.
    En général, en deçà de 20 - 25 caractères, autant garder du char.

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 12 655
    Points : 34 153
    Points
    34 153
    Billets dans le blog
    50
    Par défaut
    Bonjour,

    Un Char fixe m'aurait obligé à des TRIM non ?
    La base de prod étant ancienne, de toute façon le VARCHAR(13) pour les modeles est établi quasiment partout.

    C'est plutôt ce truc d'avoir du passé à VARCHAR(14) qui me perturbe, une erreur de ma part quelque part mais quand . Mais, bon, l'urgence d'abord les colis s'entassent !

    "Ils sont ces grand bretons" : Obélix dixit.
    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, Sidney) 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

Discussions similaires

  1. Divergence entre hébergeur de test et hébergeur de prod
    Par soledad_001 dans le forum Autres hébergeurs
    Réponses: 0
    Dernier message: 01/02/2010, 13h24
  2. [JDBC]Contraintes entre bases.
    Par tarik75 dans le forum JDBC
    Réponses: 5
    Dernier message: 05/07/2005, 15h38
  3. Pb de communication entre base de données...
    Par _matt_44 dans le forum PostgreSQL
    Réponses: 24
    Dernier message: 09/06/2005, 11h30
  4. Conflit entre bases de données
    Par BRODU dans le forum Bases de données
    Réponses: 4
    Dernier message: 18/10/2004, 11h40
  5. Transfert de table entre base de données sous delphi
    Par gregcommune dans le forum Bases de données
    Réponses: 3
    Dernier message: 27/07/2004, 07h56

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