Vous n'êtes pas identifié(e).
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
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
Merci beaucoup,
je vais essayer comme çà.
Hors ligne
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
Les types renvoyés par les fonctions, il me semble, non ?
Guillaume.
Hors ligne
Merci de ta réponse je vais regarder du côté des types composites.
Hors ligne