文字列を完全なデータベースの別の文字列で置き換えたい。データベース名が "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 ;
は、次に、あなたのような何かを行うことができます:
彼はDB内のすべてのテーブルのためにそれをやりたいcall `replace_value_in_all_cols`("A",'subhojit','jeet', @err);
。 –
おっと...はい、私はあまりにも速く読みました! – fge