[MySQL] Remplacement dans toute la base de données
Résolu
KX
Messages postés
16761
Date d'inscription
Statut
Modérateur
Dernière intervention
-
jee pee Messages postés 41548 Date d'inscription Statut Modérateur Dernière intervention -
jee pee Messages postés 41548 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je cherche à remplacer toutes les occurrences de caractères de toutes les colonnes de toutes les tables de ma base de données.
J'ai récupéré le nom de mes colonnes comme ceci :
Et je voudrais appliquer un UPDATE REPLACE comme ceci :
NB. Le remplacement de "a" en "A" n'est qu'un exemple, mon problème est plutôt de savoir comment lier les table_name et column_name entre mes deux requêtes.
J'ai essayé avec des sous-select, genre :
Mais j'ai toujours des erreurs quand j'essaye. Quelle est la bonne méthode pour faire ça ?
Merci d'avance.
Je cherche à remplacer toutes les occurrences de caractères de toutes les colonnes de toutes les tables de ma base de données.
J'ai récupéré le nom de mes colonnes comme ceci :
select table_name,column_name from information_schema.columns;
Et je voudrais appliquer un UPDATE REPLACE comme ceci :
update table_name set column_name = replace(column_name,"a","A");
NB. Le remplacement de "a" en "A" n'est qu'un exemple, mon problème est plutôt de savoir comment lier les table_name et column_name entre mes deux requêtes.
J'ai essayé avec des sous-select, genre :
update (select table_name as tables from information_schema.tables) set (select column_name from information_schema.columns as columns where table_name=tables) = replace(columns,"a","A");
Mais j'ai toujours des erreurs quand j'essaye. Quelle est la bonne méthode pour faire ça ?
Merci d'avance.
A voir également:
- [MySQL] Remplacement dans toute la base de données
- Fuite données maif - Guide
- Remplacement coco - Accueil - Réseaux sociaux
- Coco.fr remplacement - Accueil - Réseaux sociaux
- Base de registre - Guide
- Supprimer les données de navigation - Guide
4 réponses
Merci de ta réponse, je n'ai pas réussi à faire ça directement avec SQL, mais du coup j'ai fais ça en Java (je maîtrise mieux)
Voici ce que ça donne :
Voici ce que ça donne :
import java.sql.*; public class Replace { public static void main(String[] args) throws Exception { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bdd","root",""); Statement stmt = conn.createStatement(); ResultSet select = stmt.executeQuery( "select " + "concat('update ',table_name,' set ',column_name,' = replace(',column_name,',\"a\",\"A\");') " + "from information_schema.columns where table_schema = 'bdd'"); while (select.next()) { String query = select.getString(1); // UPDATE table_name SET column_name = REPLACE(column_name,"a","A"); Statement update = conn.createStatement(); try { update.execute(query); System.out.println(query); } catch (Exception e) { System.err.println(query); System.err.println(e); } update.close(); } stmt.close(); conn.close(); } }
Salut,
Je ne connais pas mysql, mais si je voulais faire une opération de ce type, sans me casser la tête, je passerais par la génération d'un script tout bête :
spool maj.sql
select 'update '||table_name||' set '||column_name||' = replace('||column_name||',"a","A");' from information_schema.columns;
Et donc j'obtiens un script sql qui contient autant de lignes que de colonnes dans les tables.
cdlt
Je ne connais pas mysql, mais si je voulais faire une opération de ce type, sans me casser la tête, je passerais par la génération d'un script tout bête :
spool maj.sql
select 'update '||table_name||' set '||column_name||' = replace('||column_name||',"a","A");' from information_schema.columns;
Et donc j'obtiens un script sql qui contient autant de lignes que de colonnes dans les tables.
cdlt
Ce que tu cherches à faire s'appelle du Sql Dynamique.
Sous Oracle c'est impossible à faire directement en sql. Il faut passer par la création de procédures ou de fonctions.
Sous Oracle c'est impossible à faire directement en sql. Il faut passer par la création de procédures ou de fonctions.