2011-12-20 59 views

回答

0
update thetable set thecol = replace(thecol, 'subhojit', 'jeet') 
where thecol like '%subhojit%'; 

here

+0

他要做到这一点在他的数据库中的所有表。 – 2011-12-20 13:38:03

+0

哎呀...是的,我读得太快了! – fge 2011-12-20 13:39:18

0

这有点粗糙和准备就绪(例如异常处理)。但是,希望你可以整理一下自己的目的:

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); 
相关问题