我试图在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'不存在


我究竟做错了什么?

最佳答案

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


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

10-06 03:03