0
我想用全数据库中的另一个字符串替换字符串。假设数据库名称是“A”,它包含101个表格。如果包含“subhojit”,我想在所有表格的列中将“subhojit”更改为“jeet”。如何用mysql数据库中整个表中的另一个字符串替换字符串
在MySql中可能吗? 需要编写程序吗? 请回复。
我想用全数据库中的另一个字符串替换字符串。假设数据库名称是“A”,它包含101个表格。如果包含“subhojit”,我想在所有表格的列中将“subhojit”更改为“jeet”。如何用mysql数据库中整个表中的另一个字符串替换字符串
在MySql中可能吗? 需要编写程序吗? 请回复。
update thetable set thecol = replace(thecol, 'subhojit', 'jeet')
where thecol like '%subhojit%';
从here。
这有点粗糙和准备就绪(例如异常处理)。但是,希望你可以整理一下自己的目的:
DELIMITER $$
CREATE PROCEDURE `replace_value_in_all_cols`(IN i_schema varchar(250),IN i_fromVal varchar(250),IN i_toVal varchar(250), OUT o_errMessage varchar(250))
BEGIN
ALL_TEXT_COLUMNS : BEGIN
DECLARE noMoreRows boolean;
DECLARE db varchar(250);
DECLARE tbl varchar(250);
DECLARE col varchar(250);
DECLARE allTextCols CURSOR FOR
select c.table_schema,c.table_name,c.column_name
from information_schema.columns c
where c.table_schema = i_schema
and lower(data_type) in ('char','text','varchar');
DECLARE EXIT HANDLER for SQLEXCEPTION set o_errMessage := "Some error message";
declare continue handler for not found set noMoreRows := true;
open allTextCols;
UPDATE_LOOP : loop
fetch allTextCols
into db,tbl,col;
if noMoreRows then
close allTextCols;
leave UPDATE_LOOP;
end if;
SET @update_stmt:=CONCAT("UPDATE ",db,".",tbl," SET ",col," = replace(",col,",'",i_fromVal,"','",i_toVal,"');");
PREPARE update_stmt FROM @update_stmt;
EXECUTE update_stmt;
DEALLOCATE PREPARE update_stmt;
end loop UPDATE_LOOP;
END ALL_TEXT_COLUMNS;
END$$
DELIMITER ;
然后,你可以这样做:
call `replace_value_in_all_cols`("A",'subhojit','jeet', @err);
他要做到这一点在他的数据库中的所有表。 – 2011-12-20 13:38:03
哎呀...是的,我读得太快了! – fge 2011-12-20 13:39:18