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

SQL Oracle Discussion :

problème expression regulière


Sujet :

SQL Oracle

  1. #1
    Membre habitué Avatar de Davboc
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 266
    Points : 168
    Points
    168
    Par défaut problème expression regulière
    Bonjour

    J'ai un problème pour écrire un regexp dans une requete pour une proc stock PLSQL :

    j'ai une requête select qui a le critère suivant (simplifié) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE REGEXP_LIKE ( TITRE , '^.+' || replace ( (NR.[NUM]),'[NUM]','[:digit:]+' )  || '.+$' )
    L'expression regulière est la suivante après le replace :

    Cette requête est censée me retrouver ce titre :

    PARA(1251\.)DROOPY S (NR.5) GLUCKSBRINGER REDIF 2564
    Or ça ne fonctionne pas...

    Elle fonctionnait avec le critère suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE TITRE LIKE ( '%' || replace ( (NR.[NUM]),'[NUM]','%' )  || '%' )
    Mais celui-ci matchait aussi les cas ou l'expression (NR.[NUM]) était en fin de chaîne...

    Je me demandais si la cause de ce problème n'était pas les parenthèses, qui sont un caractère utilisé par les reg_exp. Mais apparemment même si je les enlève du titre et de l'expression recherchée ça ne fonctionne toujours pas...

    Sans doute est-ce le point ? Comment puis-je faire en sorte qu'il soit considéré comme un caractère et non comme un élément de la regexp ?

    Auriez-vous une idée de solution ?

    Merci à vous

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par Davboc
    PARA(1251\.)DROOPY S (NR.5) GLUCKSBRINGER REDIF 2564
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    where titre like '%(NR.5)%'
    Citation Envoyé par Davboc
    (NR.[NUM]),
    c'est quelle syntaxe ça ???

  3. #3
    Membre habitué Avatar de Davboc
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 266
    Points : 168
    Points
    168
    Par défaut
    Une syntaxe perso

    En fait dans notre programme on entre des expressions à supprimer de titres (grosso modo). Pour chaque expression on dit également ou elle se trouve dans le titre : au début, à la fin ou quelquepart au milieu.

    le [NUM] représente un à N numériques, on le traduit ensuite en regexp.
    where titre like '%(NR.5)%'
    fonctionne effectivement, mais il ramène aussi les titres ou (NR.5) se trouve à la fin, ce qu'on ne veut pas. C'est pour cela que je me suis tourné vers les regexp

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where titre like '%(NR.5)___%'
    ?

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    un seul _ suffit

  6. #6
    Membre habitué Avatar de Scual
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 149
    Points : 189
    Points
    189
    Par défaut
    Ou aucun vu qu'il est suivi par un %
    Diction de DBA :
    "Tant va la cruche à l'eau qu'à la fin, ça me les brise"
    -------------------------------------
    Working on Oracle Database 10g / 11g
    -------------------------------------
    Article d'installation d'Oracle 10g AS Portal by Maxime GONTCHAROV
    labo-oracle.com

  7. #7
    Membre habitué Avatar de Davboc
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 266
    Points : 168
    Points
    168
    Par défaut
    ça marche avec le _ merci

    je ne connaissais pas ce joker en sql

    Merci !

    Question subsidiaire : J'ai cru comprendre que pour Oracle [:digit:] correspond à [0-9] or j'ai des expressions régulières qui fonctionnent avec le 2nd et pas le premier.. Quelle est la différence ?

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Citation Envoyé par Scual
    Ou aucun vu qu'il est suivi par un %
    relis le topic, tu comprendras à quoi il sert

    Citation Envoyé par Davboc
    je ne connaissais pas ce joker en sql
    % remplace une chaine de caractères alors que _ remplace un seul caratère

  9. #9
    Membre habitué Avatar de Scual
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 149
    Points : 189
    Points
    189
    Par défaut
    Si je ne m'abuse, le [:digit:] vient directement de POSIX. Je ne crois pas qu'il est utilisable avant 10g.

    Essayes le peut-être comme cela : [[:digit:]]{x}
    où x représente le nombre d'occurence.

    ++
    Diction de DBA :
    "Tant va la cruche à l'eau qu'à la fin, ça me les brise"
    -------------------------------------
    Working on Oracle Database 10g / 11g
    -------------------------------------
    Article d'installation d'Oracle 10g AS Portal by Maxime GONTCHAROV
    labo-oracle.com

  10. #10
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par Davboc
    J'ai cru comprendre que pour Oracle [:digit:] correspond à [0-9]
    [[:digit:]]

  11. #11
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    tu peux aussi employer \d au lieu de [[:digit:]], ou bien sûr [0-9] !

  12. #12
    Membre habitué Avatar de Scual
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 149
    Points : 189
    Points
    189
    Par défaut
    Wouhou c'est la foire aux doubles postes
    Citation Envoyé par orafrance
    relis le topic, tu comprendras à quoi il sert
    Au temps pour moi, j'ai laché un peu les posts pour bosser ma DBA2 Mea culpa

    ++
    Diction de DBA :
    "Tant va la cruche à l'eau qu'à la fin, ça me les brise"
    -------------------------------------
    Working on Oracle Database 10g / 11g
    -------------------------------------
    Article d'installation d'Oracle 10g AS Portal by Maxime GONTCHAROV
    labo-oracle.com

  13. #13
    Invité
    Invité(e)
    Par défaut
    Au temps en emporte le vent...

  14. #14
    Membre habitué Avatar de Davboc
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 266
    Points : 168
    Points
    168
    Par défaut
    d'accord merci pour vos réponses

    je m'étais basé sur le site officiel d'oracle qui ne parle que de notations POSIX

    http://www.oracle.com/technology/ora...egexp_pt2.html

    Bizarre qu'ils ne parlent pas des autres alors qu'elles sont plus pratiques à mon goût... Je pensais qu'Oracle ne les connaissais pas. Mea culpa j'aurais dû tester ^^


    [HS]et au passage : http://www.langue-fr.net/index/A/au_temps-autant.htm[/HS]

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/05/2010, 23h22
  2. Problème expression regulière.
    Par Jonathan.Harvey dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 06/08/2009, 03h02
  3. [RegEx] problème avec expression regulière
    Par teen6517 dans le forum Langage
    Réponses: 5
    Dernier message: 23/03/2007, 11h39
  4. Problème expression regulière ??
    Par panaone dans le forum Langage
    Réponses: 5
    Dernier message: 18/08/2005, 13h41
  5. Variables et Expression Regulière
    Par Temari dans le forum Langage
    Réponses: 5
    Dernier message: 05/08/2005, 01h55

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