Requete pour mettre à jour une partie d'un champ

Requete pour mettre à jour une partie d'un champ - SQL/NoSQL - Programmation

Marsh Posté le 27-08-2008 à 09:01:16    

J'ai besoin de la requete de la mort ORACLE :  
 
J'ai un champ "fichier" dans ma table "sauvegarde" avec l'adresse du fichier de sauvegarde.  
 
Je dois migrer de serveur (SERVEUR1 et NAS1 vers 1 seul NEW-SERVER) :  
 
Le champ est rempli comme suit :  
 
Select fichier from sauvegarde :  
 
FICHIER  
----------------------------------------
\\SERVEUR1\LOGICIEL\backup1.bak  
\\SERVEUR1\LOGICIEL\backup2.bak  
\\NAS1\LOGICIEL\backup3.bak
 
Je voudrais faire une requete pour obtenir :  
 
FICHIER  
----------------------------------------
\\NEW-SERVER\LOGICIEL\backup1.bak
\\NEW-SERVER\LOGICIEL\backup2.bak
\\NEW-SERVER\LOGICIEL\backup3.bak
 
 
Voili j 'espere avoir ete clair....  
 
Merci d avance  
 
Seb

Reply

Marsh Posté le 27-08-2008 à 09:01:16   

Reply

Marsh Posté le 27-08-2008 à 09:38:25    

Plutôt qu'une requête de la mort qui tue, pourquoi ne pas faire plusieurs petites requêtes gentillettes ?
 
1. La première requête va récupérer chaque champ.
SELECT le_champ, la_clef INTO :la_variable, :id_la_ligne FROM la_table
 
2. Quelques lignes PL/SQL ou C ou autre va remplacer changer le contenu du champ.
la_partie_constante := substr(le_champ, instr(la_variable, 'LOGICIEL', 1), 500);
la_nouvelle_variable := '\\NEW-SERVER' || la_partie_constante;
 
3. Une dernière requête fait l'update en base.
UPDATE la_table SET le_champ = :la_nouvelle_variable WHERE la_clef = :id_la_ligne;
 
Et le tour est joué !

Reply

Marsh Posté le 27-08-2008 à 13:30:34    

Requete de la mort I
No garanty ...
 
=>
Par exemple  
select replace(replace(fichier,'SERVEUR1','NEW-SERVER'),'NAS','NEW-SERVER') from sauvegarde
 
Si ok  
=>
update sauvegarde
set fichier = replace(replace(fichier,'SERVEUR1','NEW-SERVER'),'NAS','NEW-SERVER')  
where fichier <> replace(replace(fichier,'SERVEUR1','NEW-SERVER'),'NAS','NEW-SERVER')  
 
Un truc dans le style mortuaire quoi ... ;-)
 


---------------
il n'y a pas que le VTT dans la vie, il y a le Snowboard aussi ...
Reply

Marsh Posté le 27-08-2008 à 14:07:08    

J jadore ce genre de requete de la mort avec plein de replace dedans.. Je viens de reprendre un poste de DBA mais bon depuis 5 ans que j ai pas ouvert un SQL je lutte un peu mais ca revient en fait... Merci  
 
Seb

Reply

Marsh Posté le 27-08-2008 à 15:16:52    

le where sert à rien. éventuellement, le remplacer par un "not (fichier like '//SERVEUR1%' or fichier like '//NAS%')" qui sera plus performant
 
pour simplifier la clareté de la chose, j'aurais fait deux updates successifs, ça évite les replace imbriqués qui sont... relativement moyenement pas très lisible ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed