Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Invité régulier
    Femme Profil pro Pat Hoche
    Développeur informatique
    Inscrit en
    octobre 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Nom : Femme Pat Hoche
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : octobre 2012
    Messages : 20
    Points : 6
    Points
    6

    Par défaut DBLINK avec clause WHERE

    Bonjour à tous.

    Voila le souci :
    J'ai deux bases de données et j'utilise DbLink pour faire mes requêtes sur ces deux bases.
    Mon problème vient de la clause WHERE.

    Si je fait ça :
    Code :
    1
    2
    3
    4
    5
    6
    SELECT personnel.*, suivi_militaire.*
    FROM suivi_militaire 
    INNER JOIN dblink('dbname=ListePersonnel user=postgres password=AdminPsql1','SELECT matricule, nom, prenom, grade, fonction FROM personnel') 
    AS personnel(matricule varchar(50), nom varchar(50), prenom varchar(50), grade varchar(20), fonction varchar(20))
    ON suivi_militaire.matricule = personnel.matricule
    ORDER BY personnel.nom;
    J'obtiens bien les infos.

    Mais dès que je veux utiliser un WHERE, j'ai une erreur:
    ERREUR: erreur de syntaxe sur ou près de "WHERE"
    LINE 5: WHERE personnel.fonction = 'CCS'

    La requête avec le WHERE en question :
    Code :
    1
    2
    3
    4
    5
    6
    7
    SELECT personnel.*, suivi_militaire.*
    FROM suivi_militaire 
    INNER JOIN dblink('dbname=ListePersonnel user=postgres password=AdminPsql1','SELECT matricule, nom, prenom, grade, fonction FROM personnel') 
    AS personnel(matricule varchar(50), nom varchar(50), prenom varchar(50), grade varchar(20), fonction varchar(20))
    WHERE personnel.fonction = 'CCS'
    ON suivi_militaire.matricule = personnel.matricule
    ORDER BY personnel.nom;
    J'ai essayé comme ça aussi:
    Code :
    1
    2
    3
    4
    5
    6
    SELECT personnel.*, suivi_militaire.*
    FROM suivi_militaire 
    INNER JOIN dblink('dbname=ListePersonnel user=postgres password=AdminPsql1','SELECT matricule, nom, prenom, grade, fonction FROM personnel WHERE personnel.fonction = "CCS"') 
    AS personnel(matricule varchar(50), nom varchar(50), prenom varchar(50), grade varchar(20), fonction varchar(20))
    ON suivi_militaire.matricule = personnel.matricule
    ORDER BY personnel.nom;
    Et j'ai la même erreur, mais sur la ligne 3.

    Je précise que le critère de choix du WHERE, CCS n'est pas une variable, mais une chaine de caractères.

    Quelqu'un a une idée ?

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro Alain
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    5 618
    Détails du profil
    Informations personnelles :
    Nom : Homme Alain
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 5 618
    Points : 12 716
    Points
    12 716

    Par défaut

    Peut être suffit-il tout simplement de mettre les lignes de la requête dans le bon ordre, avec la clause WHERE qui suit ON

    Code :
    1
    2
    3
    4
    5
    6
    7
    SELECT personnel.*, suivi_militaire.*
    FROM suivi_militaire 
    INNER JOIN dblink('dbname=ListePersonnel user=postgres password=AdminPsql1','SELECT matricule, nom, prenom, grade, fonction FROM personnel') 
    AS personnel(matricule varchar(50), nom varchar(50), prenom varchar(50), grade varchar(20), fonction varchar(20))
    ON suivi_militaire.matricule = personnel.matricule
    WHERE personnel.fonction = 'CCS'
    ORDER BY personnel.nom;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Invité régulier
    Femme Profil pro Pat Hoche
    Développeur informatique
    Inscrit en
    octobre 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Nom : Femme Pat Hoche
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : octobre 2012
    Messages : 20
    Points : 6
    Points
    6

    Par défaut

    Dans ce cas je n'ai pas d'erreur, mais la requête me renvoie 0 ligne, alors qu'il devrait y en avoir un certain nombre.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro Alain
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    5 618
    Détails du profil
    Informations personnelles :
    Nom : Homme Alain
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 5 618
    Points : 12 716
    Points
    12 716

    Par défaut

    Là, c'est peut-être un problème au niveau des données...

    Essaye avec WHERE personnel.fonction LIKE 'CCS%'
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Invité régulier
    Femme Profil pro Pat Hoche
    Développeur informatique
    Inscrit en
    octobre 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Nom : Femme Pat Hoche
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : octobre 2012
    Messages : 20
    Points : 6
    Points
    6

    Par défaut

    YESSSSSSS !!!!!
    Ça marche avec LIKE 'CCS%'

    Donc le code final est :
    Code :
    1
    2
    3
    4
    5
    6
    7
    SELECT personnel.*, suivi_militaire.*
    FROM suivi_militaire 
    INNER JOIN dblink('dbname=ListePersonnel user=postgres password=AdminPsql1','SELECT matricule, nom, prenom, grade, fonction FROM personnel') 
    AS personnel(matricule varchar(50), nom varchar(50), prenom varchar(50), grade varchar(20), fonction varchar(20))
    ON suivi_militaire.matricule = personnel.matricule
    WHERE personnel.fonction LIKE 'CCS%'
    ORDER BY personnel.nom;

    Bizarre quand même, car si je fait un simple
    Code :
    SELECT * FROM personnel WHERE fonction='CCS'
    dans la base distante (celle du DbLink), ça marche, mais en passant par le la connexion DbLink il faut mettre un LIKE.

    Enfin bon, ça fonctionne, c'est là le principal.

    Merci à toi.

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro Alain
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    5 618
    Détails du profil
    Informations personnelles :
    Nom : Homme Alain
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 5 618
    Points : 12 716
    Points
    12 716

    Par défaut

    L'origine de ton problème est certainement que ta colonne fonction contient des espaces.
    Est-ce qu'elle ne serait pas de type CHAR dans la table d'origine ?

    Pour te débarrasser de ces espaces en fin de chaine, il faut utiliser un TRIM.

    Essaye comme ça, pour voir :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    SELECT  personnel.*
        ,   suivi_militaire.*
    FROM    suivi_militaire 
        INNER JOIN 
            DBLINK('dbname=ListePersonnel user=postgres password=AdminPsql1'
                ,   'SELECT matricule
                        ,   nom
                        ,   prenom
                        ,   grade
                        ,   TRIM(fonction)
                    FROM personnel')
                AS  personnel
                    (   matricule   VARCHAR(50)
                    ,   nom         VARCHAR(50)
                    ,   prenom      VARCHAR(50)
                    ,   grade       VARCHAR(20)
                    ,   fonction    VARCHAR(20)
                    )
            ON  suivi_militaire.matricule = personnel.matricule
    WHERE   personnel.fonction = 'CCS'
    ORDER BY personnel.nom;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Invité régulier
    Femme Profil pro Pat Hoche
    Développeur informatique
    Inscrit en
    octobre 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Nom : Femme Pat Hoche
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : octobre 2012
    Messages : 20
    Points : 6
    Points
    6

    Par défaut

    Effectivement la colonne fonction (comme les autres d'ailleurs) est en type CHARACTERE(20).

    Au lieu de mettre des TRIM partout, il n'y aurait pas un autre type qui ne stockerait pas les espaces ?

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •