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 :

Faire un replace


Sujet :

SQL Oracle

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut Faire un replace
    Bonjour a tous,
    je galere pour faire un replace avec ORACLE.

    j'ai ceci:

    <md shared="false">
    <mid>439220</mid>
    <description />
    <name>accessrights</name>
    <type>rights_md</type>
    <value>
    <![CDATA[ <?xml version="1.0" encoding="UTF-8"?><ar:access_right_md xmlns:ar="http://com/exlibris/digitool/repository/api/xmlbeans" enabled="true"><ar_copyrights required="false"><text_file></text_file></ar_copyrights><ar_conditions><ar_condition negate="false"><ar_expressions><ar_expression negate="true" ar_operation="within"><key>ip_range</key><val1>217.13.122.1</val1><val2>217.13.122.255</val2></ar_expression></ar_expressions></ar_condition><ar_condition negate="false"><ar_expressions><ar_expression negate="false" ar_operation="within"><key>ip_range</key><val1>138.4.1.1</val1><val2>138.4.255.255</val2></ar_expression></ar_expressions></ar_condition><ar_condition negate="false"><ar_expressions><ar_expression negate="false" ar_operation="within"><key>ip_range</key><val1>138.100.1.1</val1><val2>138.100.255.255</val2></ar_expression></ar_expressions></ar_condition></ar_conditions></ar:access_right_md>
    ]]>
    </value>
    </md>
    Et je voudrais remplacer toutes les IP par une autre...

    Quelqu'un saurais comment faire?
    J'ai essaye avec ca:
    update HDEMETADATA_TMP set VALUE=REPLACE('toute la chaine','la nouvelle cahine') where MID='20232';
    mais ca marche pas...car en fait cette partie que je veux remplacer est juste un fragment ...il y a plein d'info avant et apres, donc il faut localiser et remplacer.
    D'avance merci

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Je ne pense pas à avoir tout compris mais regarde si UpdateXml ne t'aide pas.

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut faire un replace
    Merci, je vais regarder ca.
    A+

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Par défaut
    Je suppose que ce que tu nous a présenté au format xml est dans une base Oracle. Dans ce cas, si ta balise VALUE est une colonne de la table HDEMETADATA_TMP, c'est possible avec REPLACE, mais REPLACE a besoin de 3 arguments (chaîne sur laquelle on travaille, chaîne recherchée, chaîne substituée).
    Ca donne donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    update HDEMETADATA_TMP set VALUE=REPLACE(VALUE, 'toute la chaine', 'la nouvelle chaine') where MID='20232';

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut faire un replace
    Mmmm
    ca implique de faire un copier coller de toute la chaine dans la fonction...
    Y'a pas un moyen de lui dire:

    regarde dans ce champs (value) et lorsque tu voie une IP (la on pourrait donner les 3 premiers chiffres qui sont toujours les memes) remplace la par une autre IP.
    C'est faisable ca?
    car dans cette base y'a une quantité impresionnante de lignes concernées
    L'idée serait de faire un update avec dans la condition:
    WHERE ID in(select
    ou ID between xx and xx
    D'avance merci

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Par défaut
    C'est exactement ce que fait le REPLACE, en l'utilisant comme je l'ai décris : tu ne fais pas un copier/coller de la chaîne dans la fonction, tu utilises la variable ou le nom de colonne de la table dans laquelle cette chaîne de caractère est stockée.
    J'espère seulement pour toi que tu as les données en base...

  7. #7
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut faire un replace
    Bonjour,
    ok alors il reste un truc que je comprend pas,
    si on reprend cet exemple:
    UPDATE HDEMETADATA_TMP SET VALUE=REPLACE(VALUE, 'toute la chaine', 'la nouvelle chaine') WHERE MID='20232';
    je dois mettre quoi a la place de 'toute la chaine' ?
    Si on considere que c'est le contenu ENTIER de VALUE que je veux remplacer
    Haaaa ou alors ici je dois mettre seulement le fragment que je veux remplacer?
    par exemple s'il y a tout le blabla en XML et dedans il y a <ip_range>une ip</ip_range>
    je met a la pace de 'toute la chaine' '<ip_range>une ip</ip_range>' et je remplace par
    '<ip_range>une nouvelle ip</ip_range>'
    C'est comme ca?
    D'avance merci

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Par défaut
    Effectivement, on ne devrait pas dire "toute la chaîne", mais "chaîne recherchée".
    Par exemple, si tu as une colonne COL qui contient 'TOTO', que tu fais un REPLACE(COL, 'O', 'A'), le résultat sera 'TATA'

  9. #9
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut faire un replace
    OK ca marche,
    c'est genial merci pour ton aide
    A +

    Luis

  10. #10
    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
    sinon, il y a la doc Oracle qui est pas mal aussi

  11. #11
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut faire un replace
    Salut
    Oui je suis entierement d'accord.
    TU sais j'ai participe aux cours oracle et ils te file des livres.
    Donc le premier reflexe a ete de regarder la dedans.
    Mais c'est asses general.
    J'ai pas trouvé d'exemple avec replace pour ca.
    Ensuite forum oracle...

    existe t'il une doc oracle genre ONLINE? avec ce genre de problemes? avec des exemples?

  12. #12
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    La doc Oracle ONLINE contient pas mal des examples.

  13. #13
    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
    Citation Envoyé par ldiaz Voir le message
    existe t'il une doc oracle genre ONLINE? avec ce genre de problemes? avec des exemples?
    si tu avais lu ce sujet : [Règles et infos] A LIRE AVANT DE POSTER

    tu l'aurais su

  14. #14
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut faire un replace
    Bonjour,
    dans la doc j'ai pas vu le probleme que j'ai maintenant:
    le replace fonctionne mais un des strings que je dois remplacer contient des ""
    donc j'ai testé ceci: des escape \"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    update HDEMETADATA_TMP set VALUE=replace(VALUE,'ar=\"http://com/exlibris/digitool/repository/api/xmlbeans\" enabled=\"true\">','ar=\"http://com/exlibris/digitool/repository/api/xmlbeans\" enabled=\"false\">') WHERE MID='339864';
     
    1 row updated.
     
    d31_rep00@DTL3> commit;
     
    Commit complete.
    a priori pas d'erreur, mais ca ne met pas a jour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    d31_rep00@DTL3> select value from HDEMETADATA_TMP where mid='339864';
     
    VALUE
    --------------------------------------------------------------------------------
    <?xml version="1.0" encoding="UTF-8"?><ar:access_right_md xmlns:ar="http://com
    /exlibris/digitool/repository/api/xmlbeans" enabled=
    "true"><ar_copyrights required="false"><text_file></
    text_file></ar_copyrights><ar_conditions><ar_conditi
    la valeur reste a true
    quelqu'un a une idée?
    D'avance merci

  15. #15
    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
    t'as pas des retours à la ligne ?

    Sinon, tu peux avoir une mise à jour réussie... qui ne modifie rien

    PS : penses aux balises CODE

  16. #16
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut faire un replace
    Salut

    dans le string j'ai ca:

    /exlibris/digitool/repository/api/xmlbeans" enabled=
    "false"><ar_copyrights required="false"><text_file><
    tu as raison apres le = il y a un retour a la ligne...mais ca c'est l'affichage tu crois? ou la valeur dans le champs peu etre comme ca?
    C'est quoi une balise CODE?

  17. #17
    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

  18. #18
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut faire un replace
    Salut a tous,
    bon bref je sais pas pourquoi mais le replace avec delimiteur ' ' fonctione meme s'il y a des " a l'interieur

    donc le replace(value,'enabled="true"','enabled="flase"')
    marche
    Merci a tous pour votre aide

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

Discussions similaires

  1. [2008R2] Faire un Replace avec un Regex dans un select
    Par Sql2008 dans le forum Développement
    Réponses: 1
    Dernier message: 29/07/2013, 16h47
  2. [Débutant] faire un replace variable double
    Par cchasse98 dans le forum C#
    Réponses: 5
    Dernier message: 21/02/2013, 10h27
  3. [Oracle] comment faire un to_number sur un replace?
    Par keumlebarbare dans le forum Oracle
    Réponses: 8
    Dernier message: 15/04/2007, 12h12
  4. Faire un replace d'un " dans un string
    Par Seth77 dans le forum C#
    Réponses: 1
    Dernier message: 27/01/2007, 16h10
  5. [C#] Comment faire String.Replace, CaseInsensitive ?
    Par lolo_ici_et_la dans le forum C#
    Réponses: 3
    Dernier message: 17/03/2006, 10h06

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