Как заменить строку другой в целых таблицах в базе данных MySQL - PullRequest
0 голосов
/ 20 декабря 2011

Я хочу заменить строку другой в полной базе данных. Предположим, имя базы данных «A» и содержит 101 таблицу. Я хочу изменить "subhojit" на "jeet" во всех столбцах таблицы, если она содержит "subhojit".

Возможно ли это в MySql? Нужно написать процедуру? Пожалуйста, ответьте.

Ответы [ 2 ]

0 голосов
/ 20 декабря 2011

Это немного грубо и готово (например, обработка исключений). Но, надеюсь, вы можете привести это в порядок в своих целях:

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);
0 голосов
/ 20 декабря 2011
update thetable set thecol = replace(thecol, 'subhojit', 'jeet')
where thecol like '%subhojit%';

С здесь .

...