博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql 动态SQL
阅读量:5945 次
发布时间:2019-06-19

本文共 992 字,大约阅读时间需要 3 分钟。

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

转载于:https://www.cnblogs.com/java-jun-world2099/articles/10305136.html

你可能感兴趣的文章
HBase数据压缩编码探索
查看>>
sprint计划会议总结
查看>>
团队项目冲刺1
查看>>
fon循环总是返回最后值问题
查看>>
Android新权限机制 AppOps
查看>>
“蓝桥杯”软件大赛入门训练4道题
查看>>
Unable to get the CMake version located at
查看>>
爬虫基本原理
查看>>
Heritage from father
查看>>
css选择器
查看>>
使用多线程
查看>>
Django--Uploaded Files以及Handlers
查看>>
在IIS(64位)上部署WCF服务访问Oracle数据库
查看>>
个人在 laravel 开发中使用到的一些技巧(持续更新)
查看>>
iOS之KVO
查看>>
数组的代替品
查看>>
BZOJ-1878: [SDOI2009]HH的项链(莫队算法)
查看>>
Python3 定时访问网页
查看>>
两种算法解决查找子串的问题:hdu1711
查看>>
老板,让我们专注的工作【写给老板的一封信】
查看>>