我们知道,在MySQL的储存过程中,一般的输入参数为各种数据类型,如数值型,字符型等。那么,能不能让输入参数等于表名呢?答案是肯定的,那就是使用MySQL提供的PREPARE语法。
关于PREPARE的具体使用方法,可以参考网址:https://dev.mysql.com/doc/refman/5.6/en/sql-syntax-prepared-statements.html .本文将会给出一个在MySQL的储存过程中使用表名为变量的例子。
打开Navicat For MySQL,在新建查询中,创建示例的储存过程sp1,代码如下:
DROP PROCEDURE IF EXISTS sp1;
DELIMITER ;;
CREATE PROCEDURE sp1(IN temp varchar(30))
BEGIN
#Routine body goes here...
SET @sqlStr:=CONCAT("select * from ",temp);
PREPARE stmt from @sqlStr;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
;;
DELIMITER ;
该储存过程使用temp为表名,将查询语句“select * from ” , temp拼接为字符串,赋值给sqlStr变量,再用PREPARE将该字符串转化为MySQL脚本中的Prepared Statements stmt, 然后执行stmt即可获得输出结果。最后通过DEALLOCATE释放该Prepared Statements.
运行该查询语句,可发现新建了储存过程sp1,如下:
新建查询,调用该储存过程:
call sp1("user");
运行结果如下:
运行成功!