Précédent   Forum du club des développeurs et IT Pro > Bases de données > PostgreSQL > Requêtes
Requêtes Forum d'entraide sur les requêtes SQL spécifiques à PostgreSQL, les triggers, les vues, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 18/10/2012, 09h25   #1
Pathoche
Invité régulier
 
Femme Pat Hoche
Développeur informatique
Inscription : 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 : 7
Points : 7
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 ?
Pathoche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2012, 11h17   #2
al1_24
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 868
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 52
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 : 4 868
Points : 11 733
Points : 11 733
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
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2012, 11h36   #3
Pathoche
Invité régulier
 
Femme Pat Hoche
Développeur informatique
Inscription : 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 : 7
Points : 7
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.
Pathoche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2012, 12h12   #4
al1_24
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 868
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 52
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 : 4 868
Points : 11 733
Points : 11 733
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
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2012, 14h45   #5
Pathoche
Invité régulier
 
Femme Pat Hoche
Développeur informatique
Inscription : 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 : 7
Points : 7
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.
Pathoche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2012, 15h19   #6
al1_24
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 868
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 52
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 : 4 868
Points : 11 733
Points : 11 733
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
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2012, 16h22   #7
Pathoche
Invité régulier
 
Femme Pat Hoche
Développeur informatique
Inscription : 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 : 7
Points : 7
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 ?
Pathoche est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 17h48.


 
 
 
 
Partenaires

Hébergement Web