IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Fonction qui découpe une chaine en section de 50 caractères


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut Fonction qui découpe une chaine en section de 50 caractères
    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

  2. #2
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut
    bonjour,

    merci de m'expliquer pourquoi ce post me vaut une évaluation négative. une explication sur ce qui ne va pas dans mon code serait sympa pour m'aider à progresser.

Discussions similaires

  1. fonction qui recherche une chaine dans une autre chaine
    Par pierre2410 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 24/05/2007, 16h30
  2. fonction qui transforme une chaine en majuscule
    Par kawther dans le forum Langage
    Réponses: 3
    Dernier message: 23/04/2007, 11h47
  3. Réponses: 23
    Dernier message: 13/11/2006, 03h33
  4. Réponses: 15
    Dernier message: 26/03/2006, 12h10
  5. Réponses: 5
    Dernier message: 18/10/2005, 21h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo