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

Requêtes PostgreSQL Discussion :

DBLINK avec clause WHERE


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 20
    Points : 16
    Points
    16
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 786
    Points
    30 786
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 20
    Points : 16
    Points
    16
    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
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 786
    Points
    30 786
    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
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    YESSSSSSS !!!!!
    Ça marche avec LIKE 'CCS%'

    Donc le code final est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 786
    Points
    30 786
    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 : 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
    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
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 20
    Points : 16
    Points
    16
    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.

Discussions similaires

  1. Retourner tous les enregistrement avec clause Where
    Par GloubGloubGloub dans le forum Access
    Réponses: 3
    Dernier message: 09/09/2006, 00h03
  2. Vue avec clause Where en fonction du USER
    Par lunab54 dans le forum Oracle
    Réponses: 8
    Dernier message: 29/08/2006, 18h39
  3. [Débutant] pb avec clause WHERE
    Par bogsy15 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/08/2006, 09h49
  4. [DTS] Problème avec clause WHERE sur Date
    Par bibou dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 28/06/2006, 12h18
  5. Petit souci avec clause where
    Par ybruant dans le forum SQL
    Réponses: 1
    Dernier message: 21/07/2005, 22h10

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