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 :

problème de boucle infinie dans ma recherche de carac, aide svp


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 134
    Points : 66
    Points
    66
    Par défaut problème de boucle infinie dans ma recherche de carac, aide svp
    bonjour,
    j'ai une chaine de caractère, et je dois récupérer les 6 digits en fin de chaines,qui sont toujours placés après DO ou MA.
    Le problème est que je peux rencontrer des chaines de Type DO au milieu de la chaine, si c'est le cas, je dois continuer à parcourir la chaine jusque à la fin ou il y a mes digits.
    je peux pas utiliser les regex car pas bonne version d'oracle.
    Donc j 'ai fait un programme qui permet de boucler sur la chaine de caractères tant que je n'ai pas mon résultat.
    mais ca fonctionne pas, ca tourne dans le vide.
    Pourriez vous m'aider?
    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
     
    w_x_text := 'Cible : vvvv DO tttt /  vvv / DO123456789</p>';
     
    w_t_donnees.extend(2);
    w_t_donnees(1) := 'DO';
    w_t_donnees(2) := 'MA';
     
    if instr(w_x_text, 'Cible') > 0 then
     
        w_n_positionDep     := instr(w_x_text, 'Cible');
        w_n_positionFin     := instr(w_x_text, 'Cible') + length('Cible');
     
    for j in 1..w_t_donnees.count loop
     
       while (w_x_utilFormEmailEtu is null or w_n_new_position = 0) loop
            w_n_new_position    := instr(w_x_text, w_t_donnees(j),w_n_positionFin);
            w_n_new_positionFin := instr(w_x_text, w_t_donnees(j),w_n_positionFin) +  length(w_t_donnees(j));
     
            if w_n_new_position > 0 then
     
              w_b_result := true;
               while (w_b_result) loop
                 w_x_utilFormInter := substr(w_x_text,w_n_new_positionFin, 1);
                 if w_x_utilFormInter in ('0', '1', '2', '3', '4', '5','6', '7', '8', '9') then
                   w_x_utilFormEmailEtu := w_x_utilFormEmailEtu ||w_x_utilFormInter;
                 else
                   w_b_result:= false;
                 end if;
                 w_n_new_positionFin := w_n_new_positionFin + 1;
               end loop;
             end if;
     
       end loop;
       exit when w_x_utilFormEmailEtu is not null;
    end loop;
     
    end if;

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    et je dois récupérer les 6 digits en fin de chaines,qui sont toujours placés après DO ou MA.
    Donc selon votre exemple 'Cible : vvvv DO tttt / vvv / DO123456789</p>', vous devez récupérer la chaîne 123456 c'est bien ça ?

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 134
    Points : 66
    Points
    66
    Par défaut
    oui tout a fait.
    Mais je boucle toujours....malgré mes conditions dans mon while.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Ok et sur cet exemple que cherchez-vous à obtenir :
    'Cible : vvvv DO tttt / vvv / DO1A2B3C4D5E6F7G8H9</p>'

    Toujours 123456 ?

  5. #5
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 134
    Points : 66
    Points
    66
    Par défaut
    Dans cet exemple :
    'Cible : vvvv DO tttt / vvv / DO1A2B3C4D5E6F7G8H9</p>'

    rien du tout car le format est toujours DO et des digit.
    DO1233654 ou TT1236547 ou PP11245411

    mais le souci c est que ces deux caracteres comme DO peuvent etre en milieu de chaine mais il ne faut pas les prendre en compte.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Ok si vous êtes sûr d'avoir toujours six chiffres après un DO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select reverse(
              substr(reverse(str),
                     least(case instr(reverse(str), 'OD') when 0 then 99 else instr(reverse(str), 'OD') end,
                           case instr(reverse(str), 'AM') when 0 then 99 else instr(reverse(str), 'AM') end) - 6, 6)) as res
      from
    (
    select 'Cible : vvvv DO tttt /  vvv / DO123456789</p>' as str
      from dual
    );
     
    RES   
    ------
    123456
    Chercher le dernier DO / MA revient à chercher le premier OD / AM de la chaîne inversée. C'est cette logique que j'ai appliquée à la requête ci-dessus.

  7. #7
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Merci pour le REVERSE que je ne connaissais pas !

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/07/2006, 11h11
  2. Réponses: 29
    Dernier message: 17/06/2006, 13h04
  3. Problème de boucle infinie...
    Par anne-so dans le forum Langage
    Réponses: 1
    Dernier message: 25/04/2006, 14h10
  4. symptome de la boucle infinie dans une requete
    Par ouam81 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 27/05/2005, 12h10
  5. Réponses: 15
    Dernier message: 24/05/2005, 08h34

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