2011-12-20 17 views
0

文字列を完全なデータベースの別の文字列で置き換えたい。データベース名が "A"であり、101のテーブルが含まれていると仮定します。 "subhojit"が含まれている場合は、すべてのテーブルの列で "subhojit"を "jeet"に変更します。mysqlデータベースのテーブル全体で文字列を別の文字列に置き換える方法

MySqlで可能ですか? 手続きを書く必要がありますか? 返信してください。

答えて

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

からhere

+0

。 –

+0

おっと...はい、私はあまりにも速く読みました! – fge

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 ; 

は、次に、あなたのような何かを行うことができます:

彼はDB内のすべてのテーブルのためにそれをやりたい
call `replace_value_in_all_cols`("A",'subhojit','jeet', @err); 
関連する問題