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

Oracle Discussion :

[Oracle 8i] expression régulière


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Par défaut [Oracle 8i] expression régulière
    Bonjour,


    Je dois rechercher les chaines de la forme suivante : XAA où X et A sont des chaines de caractères pour les remplacer par XA.

    Dans Oracle 10g, on a bien des expressions régulières mais ca n'existe pas sous 8i.

    Il parait je peux faire une procédure stockée en Java pour manipuler des regexps mais ne connaissant pas Java, si quelqu'un a un bout de code pour m'aider à démarrer, je suis preneur... Je ne sais même pas si les expressions régulières dans Java me permettront de résoudre mon pb.

    Il y a peut être une solution avec les fonctions standard du PL/SQL mais j'avoue que je sèche complètement.


    Merci pour votre aide,

    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  2. #2
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Tu peux donner un exemple concret ?

  3. #3
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    je ne comprends pas bien le problème... pourrais-tu expliquer ce que tu appelles : expressions régulières ?

  4. #4
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Par défaut
    Citation Envoyé par SheikYerbouti
    Tu peux donner un exemple concret ?
    Ma chaine de départ est ABCMACHAINEMACHAINE, à la fin je souhaite obtenir ABCMACHAINE...

    ABC et MACHAINE sont des exemples, je cherche à trouver les chaines qui sont au format XAA de manière générale...


    Citation Envoyé par orafrance
    pourrais-tu expliquer ce que tu appelles : expressions régulières ?
    C'est des expressions qui "modélisent" une chaine : par exemple quand tu fais dir a*.* tu cherches les fichiers qui commencent par a...

    En perl j'aurais fais .*(.*)$1 mais je ne sais même pas si en Java je peux faire qqchose comme ca...
    . : un caractère quelconque
    .* : n caractère quelconque
    les parenthèses "mémorise" le pattern trouvé...


    Je crois que je vais balayer la chaine en partant de la fin, et regarder si ca correspond... Le pb c'est que j'ai une table immense à convertir donc si qq1 a une solution en PL/SQL ou une meilleur solution en SQL pur, je suis preneur...


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  5. #5
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    et bien % et _ existe bien aussi en 8i, je ne comprends pas du tout le problème... pourquoi ne pas donner le code version 9i et alors nous pourrions peut-être trouver l'équivalent en 8i

  6. #6
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Par défaut
    Citation Envoyé par orafrance
    et bien % et _ existe bien aussi en 8i, je ne comprends pas du tout le problème... pourquoi ne pas donner le code version 9i et alors nous pourrions peut-être trouver l'équivalent en 8i
    % et _ c'est extrèmement limité comme expression régulière

    Elles n'ont été introduites que dans 10g en plus. Je ne sais pas non plus si c'est possible avec les regexps de 10g.

    J'ai pas l'impression que c'est faisable en SQL pur, je cherche en PL.

    Si qq1 a une meilleur idée...


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  7. #7
    Membre Expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Par défaut
    Si par exemple vous avez l'expression
    XYYYY
    on'a plusieurs possibilité :
    X
    YY
    YY
    ou bien

    XYY
    Y
    Y

  8. #8
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Par défaut
    Très bonne remarque bouyao, j'avais pas pensé à ce cas de figure, il faudrait que ca me rapporte XYY.


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  9. #9
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Si j'ai bien compris ce que tu recherches, ce code devrait répondre à tes attentes :
    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
    create or replace function ch (p_chaine in varchar2)
    return varchar2 is
      v_lgch1 number;
    begin
      if mod(length (p_chaine),2) = 0 then
        v_lgch1 := 2;
      else
        v_lgch1 := 1;
      end if;
      while v_lgch1 < length(p_chaine) loop
        if substr (p_chaine, v_lgch1 + 1, (length(p_chaine) - v_lgch1) / 2) = 
           substr (p_chaine, v_lgch1 + 1 + (length(p_chaine) - v_lgch1) / 2) then
           return (substr (p_chaine, 1, v_lgch1) || 
                   substr (p_chaine, v_lgch1 + 1, (length(p_chaine) - v_lgch1) / 2));
        end if;
        v_lgch1 := v_lgch1 + 2;
      end loop;
      return (p_chaine);
    end;
    /
    Exemple :
    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
    SQL> select ch ('XYYYY') from dual;
    CH('XYYYY')
    -------------------------------------
    XYY
     
    SQL> select ch ('XAA') from dual;
    CH('XAA')
    ---------------------------------------------------
    XA
     
    SQL> select ch('ABCMACHAINEMACHAINE') from dual;
    CH('ABCMACHAINEMACHAINE')
    ---------------------------------------------------
    ABCMACHAINE
     
    SQL> select ch('ABMACHAINE') from dual;
    CH('ABMACHAINE')
    --------------------------------------------
    ABMACHAINE

  10. #10
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Par défaut
    merci PlaineR, c'est exactement ce qu'il me fallait !

    Il y a bcp de choses auxquelles je n'avais pas pensé (avancer de 2 en 2).


    Un grand merci !

    Je vais voir ce que ca donne en terme de performances...


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Les expressions régulières en Oracle 10g et plus
    Par bsidy1 dans le forum PL/SQL
    Réponses: 1
    Dernier message: 04/08/2011, 14h36
  2. Expressions régulières et Oracle
    Par nicocolt dans le forum Oracle
    Réponses: 16
    Dernier message: 05/07/2006, 13h51
  3. [expression régulière] mon cerveau fait des noeuds..
    Par nawac dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 27/05/2003, 10h06
  4. Expressions réguliéres
    Par Tooms dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2002, 18h42
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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