<导航

Mysql 动态SQL

  我们知道,在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;
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

  该储存过程使用temp为表名,将查询语句“select * from ” , temp拼接为字符串,赋值给sqlStr变量,再用PREPARE将该字符串转化为MySQL脚本中的Prepared Statements stmt, 然后执行stmt即可获得输出结果。最后通过DEALLOCATE释放该Prepared Statements。

set @sqlStr='select * from table where condition1 = ?';
prepare s1 for @sqlStr;
--如果有多个参数用逗号分隔
execute s1 using @condition1;
--手工释放,或者是 connection 关闭时, server 自动回收
deallocate prepare s1;

 

参考文章:https://blog.csdn.net/jclian91/article/details/80272864

posted @ 2019-01-22 17:49  字节悦动  阅读(427)  评论(0编辑  收藏  举报