Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#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