PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 15/03/2012 17:07:52

marc.stx
Membre

requête sur l'intitulé d'un champ

Bonjour,

J'ai une requête qui est sûrement simple, mais je ne sais pas l'écrire.

Soit la table :

CREATE TABLE s_com_eco_empl
(
  com ,
  p08_pop1564 ,
  p08_f1564 ,
  p08_act1564 ,
  p08_actocc1564 ,
  c08_factocc1564 ,
  c08_emplt ,
  c08_actocc ,
  d99_emplt ,
  d08_emplt_sal ,
etc...
)
comment faire pour ne sélectionner que les champs qui commencent par "p08" ?
Merci pour votre aide.

Marc

Hors ligne

#2 15/03/2012 17:13:22

Marc Cousin
Membre

Re : requête sur l'intitulé d'un champ

Il faut mettre la liste des champs en dur.

Pas d'autre solution.


Marc.

Hors ligne

#3 16/03/2012 11:46:31

fredo
Membre

Re : requête sur l'intitulé d'un champ

Bonjour, que pensez vous de cette solution:

SELECT attname FROM pg_attribute WHERE attname LIKE 'p08%' AND attrelid = ( SELECT oid FROM pg_class WHERE relname = 's_com_eco_empl' );

Elle fait appel aux tables système de postgresql et fournit la liste des attributs (nom de colonne) de la table souhaitée.

Par contre, je ne sais pas si on peut ensuite intégrer ce résultat dans une query SQL pur, sans passer par du C (libpq ou libecpg).

Hors ligne

#4 16/03/2012 11:51:48

Marc Cousin
Membre

Re : requête sur l'intitulé d'un champ

Oui, la requête fonctionnera pour vous donner la liste des attributs. Vous pouvez aussi passer par la vue information_schema.columns, qui est portable sur plusieurs SGBD.

Par contre, vous ne pourrez pas en faire une liste dynamique. Il faudra que le programme qui génère la requête crée un ordre SQL à partir des noms de colonnes retournés. Vous ne pourrez pas le faire en SQL pur.


Marc.

Hors ligne

#5 16/03/2012 12:38:25

marc.stx
Membre

Re : requête sur l'intitulé d'un champ

Bonjour,

fredo a écrit :

SELECT attname FROM pg_attribute WHERE attname LIKE 'p08%' AND attrelid = ( SELECT oid FROM pg_class WHERE relname = 's_com_eco_empl' );

C'est pas exactement ce que je voulais obtenir. Je veux faire afficher les valeurs de certains champs, ceux qui commencent par "p08".
Dans l'esprit, la requête serait :
SELECT p08* FROM s_com_eco_empl

Hors ligne

#6 16/03/2012 12:42:56

rjuju
Administrateur

Re : requête sur l'intitulé d'un champ

Ce n'est pas possible "facilement" en sql.

Vous pouvez utiliser cette requête pour créer une vue que vous appellerez ensuite par exemple, ou faire un bout de code pl/pgsql, mais il n'y a aucun moyen simple de le faire, à part taper en dur le nom des champs dans votre requête.

Hors ligne

#7 16/03/2012 13:03:12

marc.stx
Membre

Re : requête sur l'intitulé d'un champ

C'est bien dommage sad.
Merci pour vos réponses !

Sauriez vous où il est possible de trouver des ressources ou des cours en ligne sur pl/pgsql ? je ne trouve des éléments que sur pl/SQL qui semble un peu différent comme langage.

Hors ligne

#8 16/03/2012 13:07:44

rjuju
Administrateur

Re : requête sur l'intitulé d'un champ

Vous avez la doc en ligne qui est un bonne source d'information :
http://docs.postgresql.fr/9.1/plpgsql.html

Hors ligne

#9 16/03/2012 15:50:12

marc.stx
Membre

Re : requête sur l'intitulé d'un champ

Merci smile

Hors ligne

Pied de page des forums