Bonjour,
j'ai crée une petite fonction qui permet de découper une chaine en section de 50 caractères en tenant compte des espaces pour faire en sorte de ne pas couper un mot en deux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 /* Fonction de mise en forme pour epaie des numeros de telephone */ create or replace FUNCTION "FEP_FORMAT_ADDRESS" (Str_replace IN VARCHAR2,posstart IN NUMBER,posend IN NUMBER ) RETURN VARCHAR2 IS /* VARIABLES */ newString varchar2(1000); endString varchar2(1000); esposition number(3); /* CURSEUR */ /* CORPS */ BEGIN esposition:=posstart; LOOP select instr (Str_replace,' ',esposition+1) into esposition from dual; EXIT When ( esposition=0 or esposition >=posend or esposition >= length(Str_replace)); END LOOP; if esposition=0 then if length(Str_replace)>posend then select substr(Str_replace,posstart,posend)||'_' into newString from dual; select substr(Str_replace,posend+1) into endString from dual; newString:= newString||'_'||HEC_FEP_FORMAT_ADDRESS (endString,posstart,posend); return newString; else return Str_replace; end if; end if; select substr(Str_replace,posstart,instr(trim(substr (Str_replace,posstart,esposition)),' ',-1))||'_' into newString from dual; select substr(Str_replace,instr(trim(substr (Str_replace,posstart,esposition)),' ',-1)+1) into endString from dual; --DBMS_OUTPUT.PUT_LINE(newString); --DBMS_OUTPUT.PUT_LINE(endString); if length(endString)>0 then newString:= newString||'_'||FEP_FORMAT_ADDRESS (endString,posstart,posend); end if; return newString; END;je voulais la partager avec vous pour profiter de votre expérience pour l'améliorer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 select FEP_FORMAT_ADDRESS ('milieu de la voisine',0,50 ) , FEP_FORMAT_ADDRESS ('13 RUE DE XAMTOUIVVET DE L''APARTEMENT DEGAUCHEàcotéduvoisinaugroschiennoiretàdroiteduvoisinàpetitchatvertetaumilieudelavoisine',0,50 ) , FEP_FORMAT_ADDRESS ('13RUEDEXAMTOUIVVET''APARTEMENTDEGAUCHEàcotéduvoisinaugroschiennoiretàdroiteduvoisinàpetitchatvertetaumilieudelavoisine',0,50 ) , FEP_FORMAT_ADDRESS ('13 RUE DE XAMTOUIVVET DE L''APARTEMENT D E GAUCHE àcotédu voisin au gros chien noir et à droite du voisin à petit chat vert et au milieu de la voisine',0,50), 1 from dual
pour le moment je sors le résultat sous cette forme
13 RUE DE XAMTOUIVVET DE L'APARTEMENT DEGAUCHEàco__téduvoisinaugroschiennoiretàdroiteduvoisinàpetitch__atvertetaumilieudelavoisine
chacune des sections de 50 etant séparé par un _ dans une grande chaine
me donne la 1ier section de 50 etc ....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 REGEXP_SUBSTR (FEP_FORMAT_ADDRESS(ad.address,0,50), '[^_]+', 1, 1)
je me demandai si avec un tableau je pouvais amélioré ma fonction.
merci de votre aide
Partager