Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/07/2008, 15h22   #1
Membre habitué
 
Luis
Inscription : avril 2006
Messages : 436
Détails du profil
Informations personnelles :
Nom : Luis

Informations forums :
Inscription : avril 2006
Messages : 436
Points : 119
Points : 119
Par défaut Faire un replace

Bonjour a tous,
je galere pour faire un replace avec ORACLE.

j'ai ceci:

Citation:
<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
ldiaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2008, 16h13   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 320
Points : 5 839
Points : 5 839
Je ne pense pas à avoir tout compris mais regarde si UpdateXml ne t'aide pas.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2008, 16h25   #3
Membre habitué
 
Luis
Inscription : avril 2006
Messages : 436
Détails du profil
Informations personnelles :
Nom : Luis

Informations forums :
Inscription : avril 2006
Messages : 436
Points : 119
Points : 119
Par défaut faire un replace

Merci, je vais regarder ca.
A+
ldiaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2008, 16h40   #4
Membre expérimenté
 
Inscription : juillet 2007
Messages : 495
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2007
Messages : 495
Points : 585
Points : 585
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 :
1
2
 
UPDATE HDEMETADATA_TMP SET VALUE=REPLACE(VALUE, 'toute la chaine', 'la nouvelle chaine') WHERE MID='20232';
__________________
Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !
dgi77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2008, 17h00   #5
Membre habitué
 
Luis
Inscription : avril 2006
Messages : 436
Détails du profil
Informations personnelles :
Nom : Luis

Informations forums :
Inscription : avril 2006
Messages : 436
Points : 119
Points : 119
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
ldiaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2008, 17h08   #6
Membre expérimenté
 
Inscription : juillet 2007
Messages : 495
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2007
Messages : 495
Points : 585
Points : 585
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...
__________________
Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !
dgi77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 14h54   #7
Membre habitué
 
Luis
Inscription : avril 2006
Messages : 436
Détails du profil
Informations personnelles :
Nom : Luis

Informations forums :
Inscription : avril 2006
Messages : 436
Points : 119
Points : 119
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
ldiaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 15h09   #8
Membre expérimenté
 
Inscription : juillet 2007
Messages : 495
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2007
Messages : 495
Points : 585
Points : 585
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'
__________________
Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !
dgi77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 15h50   #9
Membre habitué
 
Luis
Inscription : avril 2006
Messages : 436
Détails du profil
Informations personnelles :
Nom : Luis

Informations forums :
Inscription : avril 2006
Messages : 436
Points : 119
Points : 119
Par défaut faire un replace

OK ca marche,
c'est genial merci pour ton aide
A +

Luis
ldiaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2008, 11h42   #10
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
sinon, il y a la doc Oracle qui est pas mal aussi
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2008, 11h52   #11
Membre habitué
 
Luis
Inscription : avril 2006
Messages : 436
Détails du profil
Informations personnelles :
Nom : Luis

Informations forums :
Inscription : avril 2006
Messages : 436
Points : 119
Points : 119
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?
ldiaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2008, 12h05   #12
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 320
Points : 5 839
Points : 5 839
La doc Oracle ONLINE contient pas mal des examples.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2008, 12h11   #13
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
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
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2008, 11h50   #14
Membre habitué
 
Luis
Inscription : avril 2006
Messages : 436
Détails du profil
Informations personnelles :
Nom : Luis

Informations forums :
Inscription : avril 2006
Messages : 436
Points : 119
Points : 119
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 :
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 :
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
ldiaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2008, 12h00   #15
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
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
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2008, 12h06   #16
Membre habitué
 
Luis
Inscription : avril 2006
Messages : 436
Détails du profil
Informations personnelles :
Nom : Luis

Informations forums :
Inscription : avril 2006
Messages : 436
Points : 119
Points : 119
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?
ldiaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2008, 13h42   #17
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
ça j'en sais rien

Sinon : http://www.developpez.net/forums/showthread.php?t=28716
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2008, 15h26   #18
Membre habitué
 
Luis
Inscription : avril 2006
Messages : 436
Détails du profil
Informations personnelles :
Nom : Luis

Informations forums :
Inscription : avril 2006
Messages : 436
Points : 119
Points : 119
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
ldiaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h33.


 
 
 
 
Partenaires

Hébergement Web