0

カーソルから返された値をmysqlプロシージャのテーブル名として使用するにはどうすればよいですか?

DECLARE cur CURSOR FOR
select table_name, column_name
    from information_schema.columns
    where table_schema = 'foo' and table_name like 'bar%';
OPEN cur;

loop1: LOOP

FETCH cur
INTO table_val, column_val;

IF no_more_rows THEN
  CLOSE cur;
  LEAVE loop1;
END IF;
update table_val SET column_val ...

これはエラーをスローしますfoo.table_val doesnt exist。selectステートメントに渡される実際のテーブル名を取得するにはどうすればよいですか?

4

2 に答える 2

1

update table_val SET column_val ...に変更

SET @sql = CONCAT('UPDATE ', table_val, ' SET ', column_val, ' = whatever WHERE...');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

詳しくはこちらをご覧ください。

ただし、テーブル名と列名をパラメータ化できないことに注意してください。これは値でのみ機能します。

于 2012-11-08T11:52:31.983 に答える