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

DB2 Discussion :

Simplification de requête


Sujet :

DB2

  1. #21
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Hey bonjour,

    Merci pour tout tes conseils !!

    Je les ai tous appliqué et je rencontre certaines "victoires" et "défaites".

    1) Concernant le : CONCAT_WS ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	CONCAT_WS(', ',
    	       SCONET.ELEVE.PRENOM_ELEVE,
    	       SCONET.ELEVE.PRENOM2_ELEVE,
    	       SCONET.ELEVE.PRENOM3_ELEVE)         AS prenoms,
    Il me retourne cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Code: -104, SQL State: 42601]  Un jeton inattendu "CONCAT_WS" figure à la suite de "BEGIN-OF-STATEMENT".  Parmi les jetons attendus, on trouve : "<select>".. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.22.29


    2) Concernant le : INNER JOIN (VALUES ....)

    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
    INNER JOIN (VALUES  
    (31131211220, 'BTS31211'),(31131209220, 'BTS31209'),
    (31131210220, 'BTS31210'),('3113121022A', 'BTS31210'),
    (31120008220, 'BTS20008'),(31133419220, 'BTS33419'),
    (31133414220, 'BTS334145'),(31133415220, 'BTS334145'),
    (31133420220, 'BTS33420'),(20211010112, 'BCGSEANG'),
    (20211011112, 'BCGSEANG'),(20212005112, 'BCGSEANG'),
    (20212005111, 'BCGSEANG'),(20213019112, 'BCGSEANG'),
    (21220006112, 'BTNSEANG'),(21220006117, 'BTNSEANG'),
    ('2122000611M', 'BTNSEANG'),(21231017117, 'BTNSEANG'),
    (21231017112, 'BTNSEANG'),('2123101711M', 'BTNSEANG'),
    (21231018117, 'BTNSEANG'),(21231018112, 'BTNSEANG'),
    ('2123101811M', 'BTNSEANG'),('2123100A11A', 'BTNSEANG'),
    (21231019112, 'BTNSEANG'),(21231019117, 'BTNSEANG'),
    ('2123101911M', 'BTNSEANG'),(21233402112, 'BTNSEANG'),
    (24723004332, 'BTNSEANG'),('2472300A11A', 'BTNSEANG'),
    (24723005332, 'BCPSEANG'),(24723103332, 'BCPSEANG'),
    (24723103337, 'BCPSEANG'),(24723405332, 'BCPSEANG'),
    (24733403332, 'BCPSEANG'),(20211010111, 'BCGINTER'),
    (20213019111, 'BCGINTER'))
    AS FORMATION (CODE_MEF, FORMATION_SUIVIE) ON FORMATION.CODE_MEF = M.CODE_MEF
    DBVisualizer me retourne cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Code: -420, SQL State: 22018]  Caractère incorrect dans une chaîne de caractères utilisée comme argument de la fonction "DECFLOAT".. SQLCODE=-420, SQLSTATE=22018, DRIVER=4.22.29


    Ici j'ai dû retirer les simple quote lorsqu'il n'y avait pas de lettres (24723103337) ('2123101911M')

    et je ne parviens pas à trouver la source ???

    Merci d'avance pour vos lumières, une fois de plus ;-)

    Ludo.

  2. #22
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 730
    Points : 1 416
    Points
    1 416
    Par défaut
    Citation Envoyé par LudoV63 Voir le message
    1) Concernant le : CONCAT_WS ...
    la fonction concat_ws() apparait avec la version 9.1.
    Tu utilises quelle version de Postgresql ?

    Sinon tu peux utiliser la fonction
    https://www.postgresql.org/docs/curr...UNCTIONS-TABLE
    exemple : SELECT ARRAY_TO_STRING(ARRAY[title, firstname, surname], ' ') AS fullname FROM persons;

    2) Concernant le : INNER JOIN (VALUES ....)

    [Code: -420, SQL State: 22018] Caractère incorrect dans une chaîne de caractères utilisée comme argument de la fonction "DECFLOAT".. SQLCODE=-420, SQLSTATE=22018, DRIVER=4.22.29

    Ici j'ai dû retirer les simple quote lorsqu'il n'y avait pas de lettres (24723103337) ('2123101911M')
    [/QUOTE]

    Essaie de commencer par une valeur non numérique (ie '2123101911M') pour le premier tuple.
    Le savoir est une nourriture qui exige des efforts.

  3. #23
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Tu utilises quelle version de Postgresql ?
    Voir capture ci-jointe.

    Mais pour rappel, je travaille sur une base en DB2 (version 4.22)

    Je vais essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ARRAY_TO_STRING(ARRAY[
    Ok je vais essayer comme ça pour le INNER JOIN.

    Merci encore c'est vraiment cool !!!
    Images attachées Images attachées  

  4. #24
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 730
    Points : 1 416
    Points
    1 416
    Par défaut
    Citation Envoyé par LudoV63 Voir le message
    Mais pour rappel, je travaille sur une base en DB2 (version 4.22)
    Ben si ta base est en DB2 pourquoi tu postes sur le forum Postgresql ?

    Teste donc :
    ou
    Le savoir est une nourriture qui exige des efforts.

  5. #25
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Euhhhhhhh :-( parceque je crois que je me suis trompé au début .... lol

    En fait j'ai plein de bases sur lesquelles je travaille qui sont en POSTGRESQL .... je pense que je n'ai pas vérifié avant de publier.

    Ni db2level ni SELECT version(); ne fonctionne

    Erreur pour db2level :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Code: -104, SQL State: 42601]  Un jeton inattendu "END-OF-STATEMENT" figure à la suite de "db2level".  Parmi les jetons attendus, on trouve : "JOIN <joined_table>".. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.22.29
    Erreur pour SELECT version(); :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    1) [Code: -104, SQL State: 42601]  Un jeton inattendu "END-OF-STATEMENT" figure à la suite de "SELECT version()".  Parmi les jetons attendus, on trouve : "<table_expr>".. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.22.29
    2) [Code: -727, SQL State: 56098]  Une erreur s'est produite lors d'une action système implicite de type "2". Les informations renvoyées pour l'erreur comprennent le SQLCODE "-104", le SQLSTATE "42601" et les jetons de message "END-OF-STATEMENT|SELECT version()|<table_expr>".. SQLCODE=-727, SQLSTATE=56098, DRIVER=4.22.29

  6. #26
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 730
    Points : 1 416
    Points
    1 416
    Par défaut
    Je ne m'y connais pas en DB2

    Du coup j'ai vérifié sur internet avec des portions du message d'erreur et il semblerait que tu soit effectivement sur DB2.

    Une petite recherche "DB2 CONCAT" semble fructueuse.

    En supposant que le premier prénom est rempli en premier, essaie donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CONCAT(SCONET.ELEVE.PRENOM_ELEVE,
    	      ', ' || SCONET.ELEVE.PRENOM2_ELEVE,
    	      ', ' || SCONET.ELEVE.PRENOM3_ELEVE)         AS prenoms
    Pour ce qui est de la jointure, je ne sais pas si ça peut marcher.

    comme l'expression CASE fonctionne tu peux envisager de le "remonter" dans le select :
    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
    35
    36
    37
    CASE when M.CODE_MEF in 
                    ('20213019111'
                    ,'20211010111')
                        then 'BCGINTER'
            when M.CODE_MEF in 
                    ('20211011112'
                    ,'20212005111'
                    ,'20211010112'
                    ,'20212005112'
                    ,'20213019112'
                    ,'24723005332'
                    ,'24723103337'
                    ,'24733403332'
                    ,'24723103332'
                    ,'24723405332'
                    ,'21220006112'
                    ,'2122000611M'
                    ,'21231017112'
                    ,'21231018117'
                    ,'2123101811M'
                    ,'21231019112'
                    ,'2123101911M'
                    ,'24723004332'
                    ,'21220006117'
                    ,'21231017117'
                    ,'2123101711M'
                    ,'21231018112'
                    ,'2123100A11A'
                    ,'21231019117'
                    ,'21233402112'
                    ,'2472300A11A')
                        then 'BCGSEANG'
            when M.CODE_MEF in 
                    ('31120008220')
                        then 'BTS20008'
            Else '**CODE_MEF inconnu**'
        end as ...
    Mais comme j'imagine que cette liste va évoluer dans le temps ils serait plus sage de demander à créer la table correspondante et y insérer les valeurs.
    Le savoir est une nourriture qui exige des efforts.

  7. #27
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Je regarde ça de suite.

    J'ai cherché un moment et je cherche toujours pour le CONCAT, je vais essayer ce que tu as trouvé ;-) à tout de suite

  8. #28
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Voilà le message d'erreur pour le CONCAT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    1) [Code: -440, SQL State: 42884]  La routine autorisée appelée "CONCAT" de type "FUNCTION" et dont les arguments sont compatibles est introuvable.. SQLCODE=-440, SQLSTATE=42884, DRIVER=4.22.29
    2) [Code: -727, SQL State: 56098]  Une erreur s'est produite lors d'une action système implicite de type "2". Les informations renvoyées pour l'erreur comprennent le SQLCODE "-440", le SQLSTATE "42884" et les jetons de message "CONCAT|FUNCTION".. SQLCODE=-727, SQLSTATE=56098, DRIVER=4.22.29
    Je regarde pour le CASE

  9. #29
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 730
    Points : 1 416
    Points
    1 416
    Par défaut
    Visiblement c'est un problème de version ...
    https://www.ibm.com/support/knowledg...ofstrings.html
    Le savoir est une nourriture qui exige des efforts.

  10. #30
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Je vais installer la IBM Data Server Driver for JDBC and SQLJ V11.1.4 Fix Pack 4a pour faire la MAJ des IBM Data Server Client Packages

  11. #31
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 730
    Points : 1 416
    Points
    1 416
    Par défaut
    Ah !
    et ça va faire augmenter de version le serveur ?


    **Je pense qu'il est utile pour toi maintenant de refaire un post dans le bon forum
    Le savoir est une nourriture qui exige des efforts.

  12. #32
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Non je sais bien que ça ne fera rien évoluer mais dès fois que ce soit en LOCAL que ça coince ?

    Mdr le gars il est optimiste ;-)

    Oui mais y a pas moyen de basculer la conversation dans la bonne file ?

  13. #33
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Michel.Priori Voir le message
    Visiblement c'est un problème de version ...
    https://www.ibm.com/support/knowledg...ofstrings.html
    Merci pour ton lien, je vais voir ce que je peux faire mais à mon avis ils vont pas me changer la version pour une fonction mdr

  14. #34
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Michel.Priori Voir le message
    Je ne m'y connais pas en DB2

    Du coup j'ai vérifié sur internet avec des portions du message d'erreur et il semblerait que tu soit effectivement sur DB2.

    Une petite recherche "DB2 CONCAT" semble fructueuse.

    En supposant que le premier prénom est rempli en premier, essaie donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CONCAT(SCONET.ELEVE.PRENOM_ELEVE,
    	      ', ' || SCONET.ELEVE.PRENOM2_ELEVE,
    	      ', ' || SCONET.ELEVE.PRENOM3_ELEVE)         AS prenoms
    Pour ce qui est de la jointure, je ne sais pas si ça peut marcher.

    comme l'expression CASE fonctionne tu peux envisager de le "remonter" dans le select :
    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
    35
    36
    37
    CASE when M.CODE_MEF in 
                    ('20213019111'
                    ,'20211010111')
                        then 'BCGINTER'
            when M.CODE_MEF in 
                    ('20211011112'
                    ,'20212005111'
                    ,'20211010112'
                    ,'20212005112'
                    ,'20213019112'
                    ,'24723005332'
                    ,'24723103337'
                    ,'24733403332'
                    ,'24723103332'
                    ,'24723405332'
                    ,'21220006112'
                    ,'2122000611M'
                    ,'21231017112'
                    ,'21231018117'
                    ,'2123101811M'
                    ,'21231019112'
                    ,'2123101911M'
                    ,'24723004332'
                    ,'21220006117'
                    ,'21231017117'
                    ,'2123101711M'
                    ,'21231018112'
                    ,'2123100A11A'
                    ,'21231019117'
                    ,'21233402112'
                    ,'2472300A11A')
                        then 'BCGSEANG'
            when M.CODE_MEF in 
                    ('31120008220')
                        then 'BTS20008'
            Else '**CODE_MEF inconnu**'
        end as ...
    Mais comme j'imagine que cette liste va évoluer dans le temps ils serait plus sage de demander à créer la table correspondante et y insérer les valeurs.
    **********************

    Merci beaucoup, le CASE fonctionne parfaitement bien !!! :-D

Discussions similaires

  1. Simplification de requête
    Par Ludix_ dans le forum Langage SQL
    Réponses: 12
    Dernier message: 13/04/2012, 14h26
  2. Simplification de requêtes SQL
    Par XGuarden dans le forum VB.NET
    Réponses: 8
    Dernier message: 30/12/2010, 11h31
  3. Simplification de requête
    Par Louis-Guillaume Morand dans le forum SQL
    Réponses: 21
    Dernier message: 03/03/2008, 12h26
  4. simplification de requête
    Par GMI3 dans le forum Oracle
    Réponses: 3
    Dernier message: 03/05/2006, 14h47
  5. [Access] simplification de requètes.
    Par pmboutteau dans le forum Langage SQL
    Réponses: 14
    Dernier message: 02/02/2006, 09h04

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