MySQL存储函数

时间:2016-01-26 21:34:21

标签: mysql mysql-workbench procedures

我正在尝试在mySQL Workbench中创建一个存储过程。目标是清理/标准化驻留在加载的临时表中的字段。这是代码的片段......许多更新行缺失。

CREATE DEFINER=`root`@`localhost` PROCEDURE `Address`(TBL VARCHAR(50))
BEGIN

SET @table_name = TBL;

UPDATE table_name SET AD1 = REPLACE(AD1,"P.O. BOX ","BOX ");
UPDATE table_name SET AD1 = REPLACE(AD1,"POBOX ","BOX ");
UPDATE table_name SET AD1 = REPLACE(AD1,"P O BOX ","BOX ");

END  

问题:该功能无法识别该表。

错误代码:

  

146' kalo.table_name'不存在

我做错了什么?

2 个答案:

答案 0 :(得分:0)

UPDATE table_name SET AD1 = REPLACE(AD1,"P.O. BOX ","BOX ");
       ^--missing @

即使您记得将@放在那里,也无法使用vars替换SQL关键字/标识符。您需要使用动态SQL,例如手动构建查询字符串,然后exec该字符串。没有其他方法可以将@table_name字符串转换为实际标识符。

答案 1 :(得分:0)

执行此操作的唯一方法是将Query放入变量并将其作为预准备语句

执行
CREATE DEFINER=`root`@`localhost` PROCEDURE `Address`(TBL VARCHAR(50))
BEGIN

SET @table_name = TBL;

SELECT CONCAT( "UMDATE ",@table_name, " SET ....") INTO @SQL;
PREPARE stmt FROM @SQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- next update
-- ...
END