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 :

Expressions régulières et Oracle


Sujet :

Oracle

  1. #1
    Membre régulier
    Profil pro
    Auditeur informatique
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 85
    Points
    85
    Par défaut Expressions régulières et Oracle
    Bonjour,

    J'aimerais savoir si on peut gérer les expressions régulières dans Oracle ?

    Cordialement,
    Nico

  2. #2
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Bonjour,


    A partir d'Oracle 10g oui, par exemple http://www.oracle.com/technology/obe...exp/regexp.htm

    Avant la 10g, il y a parfois moyen de s'en sortir autrement.

    Qu'est-ce-que tu souhaites faire exactement ?


    Laly.

  3. #3
    Expert éminent sénior
    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
    Points : 11 862
    Points
    11 862
    Par défaut
    Oui, d'ailleurs il y a un example dans la FAQ Oracle
    http://oracle.developpez.com/faq/?page=12#chaineformat

  4. #4
    Expert éminent sénior
    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
    Points : 11 862
    Points
    11 862
    Par défaut
    Il y a un article nouvellement paru sur un blog sur cette question
    http://technology.amis.nl/blog/?p=1258

  5. #5
    Membre régulier
    Profil pro
    Auditeur informatique
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par lalystar
    Bonjour,


    A partir d'Oracle 10g oui, par exemple http://www.oracle.com/technology/obe...exp/regexp.htm

    Avant la 10g, il y a parfois moyen de s'en sortir autrement.

    Qu'est-ce-que tu souhaites faire exactement ?


    Laly.
    Merci,

    En fait, j'ai deux problèmes :

    La première chose est que je dispose d'une table avec 4 champs, et je veux en faire une table avec 2 champs. Le premier champ, aucun problème, mais dans les 3 champs suivants se trouvent les données dont j'ai besoin. Ces données sont dans un des 3 champs et dans les deux autres champs j'ai d'autres données qui ne m'intéresse pas. Déjà à ce niveau je sais pas trop comment faire en SQL

    Dans un deuxième temps, dans la mesure où la donnée dont j'ai besoin a toujours la même structure, pour chaque ligne de la table je dois analyser le contenu des 3 champs, et dès lors que j'ai trouvé la donnée dont j'ai besoin, je l'insère dans la nouvelle table.

    En PHP cela ne pose aucun problème, mais je dois réaliser ce traitement uniquement par Oracle8i (V 8.1.7.4.0 ).

    Merci pour votre aide,

    Nico

  6. #6
    Membre régulier
    Profil pro
    Auditeur informatique
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 85
    Points
    85
    Par défaut
    La version 8i ne gère t-elle pas les expressions régulières ?

  7. #7
    j6m
    j6m est déconnecté
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 87
    Points : 84
    Points
    84
    Par défaut
    si tu veux faire de l'expression régulière entre une table A et une table B pourquoi ne pas exporter dans un fichier et mouliner ailleurs dans un endroit qui comprend [*,[nimportekoi}&lereste] et réimporter ensuite dans ta table B? Ou alors SQL*Loader (expressions trés trés régulières...)

  8. #8
    Membre régulier
    Profil pro
    Auditeur informatique
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 85
    Points
    85
    Par défaut
    Merci pour ta réponse,

    Faire la moulinette dans un autre endroit implique de sortir du contexte de la base, or je dois réaliser ce traitement de manière totalement autonome, car l'appli est destiné à un public qui ne connait pas le SQL, il faut donc que tout se passe dans mon fichier SQL.

    Le soucis, c'est que je découvre Oracle, je ne suis qu'un "MySQL-iste", j'ai donc beaucoup de lacunes sous Oracle... Dans tous les cas je vais expliquer mon problème de manière peut-être plus simple que lors de mon dernier post, qui n'a pas déchainé les internautes (le week end porte conseil ).

    On va dire que j'ai une table avec 4 champs comme suit :

    ticket | iden1 | iden2 | iden3
    -------------------------------------------------
    0123 | 0102 | V1255 |
    0456 | | 5685 |
    0789 | V4586 | | 6374


    Je veux en faire une table avec deux champs, comme suit :

    ticket | iden1
    ------------------
    0123 | 0102
    0456 | 5685
    0789 | 6374

    En fait les données qui se trouvent dans les champs idenX et dont j'ai besoin ont toujours la même structure, je peux donc par une règle d'expressions régulières les retrouver, et ensuite l'insérer dans la nouvelle table

    Je pense que cette explication est plus claire, en espérent que vous puissiez m'aider.

    @+
    Nico

  9. #9
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Bonjour,


    Je ne suis pas sur d'avoir compris la règle qui permet de choisir la donnée de la seconde colonne : dans les champs idenX, tu prends la donnée qui ne commence pas par V ou à défaut la donnée non nulle ?
    Si c'est ca, ca me semble simple à faire et sans expression régulière.

    Tu peux expliciter ta facon de choisir les données ?


    Laly.

  10. #10
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Peux-tu préciser les règles que tu dois mettre en oeuvre, j'ai déjà simulé les expressions régulières avec des TRANSLATE, mais on ne peut pas tout faire ainsi...

  11. #11
    Membre régulier
    Profil pro
    Auditeur informatique
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 85
    Points
    85
    Par défaut
    En fait je ne prend que les données qui ne commencent pas par V, et qui ne sont pas nulles, je prends en fait tout ce qui a 4 chiffres

    Merci
    Nico

  12. #12
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    WHERE TRANSLATE (laChaine, '0123456789', '0000000000') = '0000'

  13. #13
    Membre régulier
    Profil pro
    Auditeur informatique
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 85
    Points
    85
    Par défaut
    Merci,

    En fait tu testes si la chaine est une chaine numérique ?, mais pourquoi = '0000' ?

    Nico

  14. #14
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par nicocolt
    En fait tu testes si la chaine est une chaine numérique ?, mais pourquoi = '0000' ?
    Parce que tu as demandé :

    je prends en fait tout ce qui a 4 chiffres

  15. #15
    Membre régulier
    Profil pro
    Auditeur informatique
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 85
    Points
    85
    Par défaut
    Ben oui, c'est évident......

    Et dans le cas ou tu recherches des chiffres, par exemple 4 suivi de 3 lettres, avec TRANSLATE c'est faisable également ?

    Nico

  16. #16
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Je ne suis pas certain d'avoir compris la question, si tu veux 4 chiffres suivis de 3 lettres majuscules ('568JHJ' par exemple) l'idée est la même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TRANSLATE (laChaine, '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',
                         '0000000000AAAAAAAAAAAAAAAAAAAAAAAAAA') = '0000AAA'

  17. #17
    Membre régulier
    Profil pro
    Auditeur informatique
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 85
    Points
    85
    Par défaut
    C'est tout à fait ça, en fait TRANSLATE réalise un peu de la même manière ce que font les fonctions pour les expressions régulières.

    Nico

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. [Oracle 8i] expression régulière
    Par lalystar dans le forum Oracle
    Réponses: 9
    Dernier message: 09/02/2005, 13h56
  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