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;
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
je voulais la partager avec vous pour profiter de votre expérience pour l'améliorer.

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

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
REGEXP_SUBSTR (FEP_FORMAT_ADDRESS(ad.address,0,50), '[^_]+', 1, 1)
me donne la 1ier section de 50 etc ....

je me demandai si avec un tableau je pouvais amélioré ma fonction.

merci de votre aide