当前位置: 首页 > news >正文

MySQL预处理语句(PREPARE)和动态SQL

MySQL预处理语句(PREPARE)和动态SQL

1.应用场景

通过存储过程接收一个字符串形式的SQL条件(where后的条件),并将其直接用于SELECT语句的WHERE子句中,使用预处理语句(PREPARE)和动态SQL来实现这一功能。
通过存储过程,将处理结果返回。

2. 存储过程代码

需要用prepare 预处理SQL,类似Oracle 的execute immediate SQL 的作用。

CREATE DEFINER=`root`@`%` PROCEDURE `pro_test_grade_condition`(in conditionstr varchar(255),out v_count int )
begin  -- 确保传入的条件字符串不为空或null  if conditionstr is null or conditionstr = '' then  set conditionstr = '1=1'; -- 提供一个默认的永远为真的条件  end if;  -- 使用动态sql来执行查询  set @sql = concat('select count(*) into @tmp_count from test_grade t where ', conditionstr);  -- 准备并执行sql语句  -- MySQL的预处理语句(Prepared Statements)API不允许直接执行存储在字符串变量中的SQL语句	-- 动态构建的SQL语句(存储在用户定义的变量中,如本例中的@sql)准备(或编译)成一个可执行的语句对象prepare pre_sql from @sql;  -- 执行准备好的查询execute pre_sql; -- 释放查询语句对象资源deallocate prepare pre_sql; set v_count = @tmp_count;
end

需要注意:
(1)动态SQL语句的字符串,必须用会话变量 @sql ;
(2)prepare pre_sql from @sql; 执行前,需要预编译;
(3)动态SQL语句中的变量@tmp_count,必须用会话变量,然后赋值到返回参数中。

3. 调用

call pro_test_grade_condition(" t.test_date>'2024-06-01' and t.test_date<'2024-07-01' and t.math>90 and t.english>90;",@test_num);

执行效果:

mysql> call pro_test_grade_condition(" t.test_date>'2024-06-01' and t.test_date<'2024-07-01' and t.math>90 and t.english>90;",@test_num);
Query OK, 0 rows affected, 1 warning (0.04 sec)mysql> select @test_num;
+-----------+
| @test_num |
+-----------+
|         3 |
+-----------+
1 row in set (0.00 sec)mysql>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • linux 查看端口占用并处理
  • 【C++】特殊类的设计与类型转换
  • 「栈」实现LIFO栈(先进后出栈|堆栈|stack)的功能 / 手撕数据结构(C++)
  • DALL-E 2:当AI遇上画笔,艺术界的“魔术师”横空出世!
  • 电脑屏幕录制工具分享5款,附上详细电脑录屏教程(2024全新)
  • 【Java】 深入了解 Java util 包中的 add() 方法
  • Elasticsearch 创建索引库指南
  • ERROR 1698 (28000): Access denied for user ‘root‘@‘localhost‘
  • vulhub,docker一直启动不起来?docker配置文件错误(/etc/docker/daemon.json )
  • 前端传递ids ,gorm 删除
  • IMU助力跑步参数评估
  • 漏洞复现-Apache Kafka Clients JNDI注入漏洞 (CVE-2023-25194)
  • springboot项目搭建集成 redis/跨域/远程请求
  • 在Ubuntu上有什么命令,或者是系统文件能告诉我链接nvme ssd的pcie槽位是不是支持热插拔功能?
  • 【Cpp筑基】三、对象和类
  • @angular/forms 源码解析之双向绑定
  • 【Linux系统编程】快速查找errno错误码信息
  • axios 和 cookie 的那些事
  • C++类的相互关联
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • HTML中设置input等文本框为不可操作
  • KMP算法及优化
  • MYSQL 的 IF 函数
  • nfs客户端进程变D,延伸linux的lock
  • python学习笔记-类对象的信息
  • React系列之 Redux 架构模式
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • tensorflow学习笔记3——MNIST应用篇
  • ubuntu 下nginx安装 并支持https协议
  • uni-app项目数字滚动
  • vue脚手架vue-cli
  • Vue--数据传输
  • 欢迎参加第二届中国游戏开发者大会
  • 看域名解析域名安全对SEO的影响
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 手写双向链表LinkedList的几个常用功能
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 一个SAP顾问在美国的这些年
  • 一起参Ember.js讨论、问答社区。
  • 正则学习笔记
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​​​【收录 Hello 算法】9.4 小结
  • ​2020 年大前端技术趋势解读
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #if #elif #endif
  • #QT项目实战(天气预报)
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (03)光刻——半导体电路的绘制
  • (1)(1.13) SiK无线电高级配置(五)
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (7)svelte 教程: Props(属性)