存储过程中使用变量作为表名

存储过程中使用变量作为表名

作者:LAMP小白  点击:2232  发布日期:2012-11-11 22:21:00  返回列表
mysql> CREATE PROCEDURE mio_insert_t
-> (IN table_name CHAR(5))
-> BEGIN
-> DECLARE i INT;
-> SET i = 0;
-> WHILE i < 1000 DO
-> INSERT INTO table_name SET `id`=i,`val`=i;
-> SET i = i + 1;
-> END WHILE;
-> END$
Query OK, 0 rows affected (0.01 sec)

但是这样不行 MYSQL提示找不到表table_name
看来MYSQL把我的变量解析成表名了

怎么办呢?上网发现绝大多数都是推荐使用预处理来解决这个问题,于是改写为

mysql> CREATE PROCEDURE mio_insert_t
-> (IN table_name CHAR(10))
-> BEGIN
-> DECLARE i INT;
-> SET i = 0;
-> WHILE i < 1000 DO
-> SET @stmt = CONCAT('INSERT INTO ', table_name, ' SET `id`=?,`val`=?;');
-> PREPARE miosql FROM @stmt;
-> SET @a = i;
-> SET @b = 1;
-> EXECUTE miosql USING @a,@b;
-> SET i = i + 1;
-> END WHILE;
-> END$
Query OK, 0 rows affected (0.00 sec)

哦耶~问题解决!

其中PREPARE用于预处理我们生成的字符串
EXECUTE时再绑定值


上一篇:触发器 下一篇:快递查询API
0