Requete pour mettre à jour une partie d'un champ - SQL/NoSQL - Programmation
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é !
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 ... ;-)
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
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
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