2012-11-08 62 views
0

如何使用從Cursor返回的值作爲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語句?

+0

要爲表使用動態名稱,您必須使用準備語句(動態sql)。你知道嗎? – Sami

回答

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; 

瞭解更多關於它here

但請注意,您不能參數化表和列名稱。這隻適用於值。

+0

它爲@sql拋出錯誤,我的msql版本是5.0.21,使用SET'@sql = CONCAT()'檢查以及 – GoodSp33d

+0

@ 2-Stroker更新了答案。請再試一次。 **總是包含錯誤信息。** – fancyPants

+0

我相信它應該是'EXECUTE stmt'而不是'@ sql' :) – GoodSp33d