MySQL之在储存过程中使用表名为变量-阿里云开发者社区

开发者社区> 数据库> 正文

MySQL之在储存过程中使用表名为变量

简介:   我们知道,在MySQL的储存过程中,一般的输入参数为各种数据类型,如数值型,字符型等。那么,能不能让输入参数等于表名呢?答案是肯定的,那就是使用MySQL提供的PREPARE语法。

  我们知道,在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,如下:


新建储存过程sp1

  新建查询,调用该储存过程:

call sp1("user");

运行结果如下:


调用储存过程

  运行成功!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章