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 10/10/2008 14:34:44

gilou974
Membre

Parcourir une table pour executer une fonction sur un des champs

Bonjour à tous,

voilà j'ai une fonction qui découpe une adresse en num, voi et nom à partir d'un texte.

Ce que je voudrais en fait c pouvoir parcourir une table et appliquer cette fonction sur le champ adresse de la table et avoir en sortie le tout.


TABLE PERSONNE (
id int,
nom varchar(30)
adresse varchar(60)
cp varchar(5)
....
.
.
.
.....
)

CREATE OR REPLACE FUNCTION coupeAdresse( TEXT, OUT rue varchar(5), OUT voie varchar(50), OUT nom varchar(34) )
AS $$
    SELECT substring ( ltrim( $1,' ') from '[0-9]*') ,
    upper (substring ( upper($1) from 'RUE|ALLEE|AVENUE|BOULEVARD') ) ,
    upper (ltrim( regexp_replace( ltrim( regexp_replace ( upper ( ltrim ( $1,' ' ) ) ,'[0-9]*','' ),','), 'RUE|ALLEE|AVENUE|BOULEVARD',''),' ')) ;
$$LANGUAGE SQL;


et donc pouvoir
boucler sur la table en applicant coupeAdresse ( PERSONNE.adresse )

quelqu'un aurait-il une idée .??

Merci d'avance

Hors ligne

#2 10/10/2008 14:48:30

gleu
Administrateur

Re : Parcourir une table pour executer une fonction sur un des champs

Je ne vois pas comment ça peut marcher, à moins de créer une autre procédure stockée, en PL/pgsql cette fois, en utilisant une boucle FOR. Mais bon, pas super pour les perfs.

Peut-être que le mieux est de créer trois fonctions, récupérant chacune une partie. Il serait alors possible de faire un :

<code>SELECT numeroadresse(adresse), typerueadresse(adresse), nomrueadresse(adresse) FROM personne</code>


Guillaume.

Hors ligne

#3 10/10/2008 14:56:34

gilou974
Membre

Re : Parcourir une table pour executer une fonction sur un des champs

Merci beaucoup,

je vais essayer comme çà.

Hors ligne

#4 10/10/2008 16:09:29

gilou974
Membre

Re : Parcourir une table pour executer une fonction sur un des champs

A nouveau j'ai besoin de votre aide:

j'ai donc maintenant mes trois fonctions mais je voudrais en creer une autre qui me permettre de passer en parametre le nom d'une table, la clé primaire de la table et le nom du champ adresse de maniere a avoir tous les resultats pour :

select table.id, table.champAdresse, coupeAdresseNum(champAdresse), coupeAdresseVoie( champAdresse ), coupeAdresseNom( champAdresse )

est-ce possible ??

J'ai regardé un peu du côté de RETURN NEXT AVEC SETOF mais je vois pas vraiment quel type je dois mettre en retour


Merci si vous pouvez m'aider.

Hors ligne

#5 10/10/2008 16:49:36

gleu
Administrateur

Re : Parcourir une table pour executer une fonction sur un des champs

Les types renvoyés par les fonctions, il me semble, non ?


Guillaume.

Hors ligne

#6 13/10/2008 09:25:10

gilou974
Membre

Re : Parcourir une table pour executer une fonction sur un des champs

Merci de ta réponse je vais regarder du côté des types composites.

Hors ligne

Pied de page des forums