探讨MySQL存储过程返回记录集

探讨MySQL存储过程返回记录集

1.问题描述

通过存储过程计算统计后,返回程序一个记录集。如果使用表,把记录集保存在过渡表中,在多用户访问的时候,表的数据可能不可控。
使用MySQL 的临时内存表,可以实现在独立会话之间互不可见,而且会话结束后,自动删除。

2.测试程序

(1)存储过程

存储过程用途,入口参数,学生分数的区间范围值,返回值是分数区间的人数。
同时将相应的学生信息保存在临时表中,用于查询。

create temporary table tmp_student (name varchar(50),grade int ,birthday date) engine=memory ;

存储过程如下:

CREATE DEFINER=`root`@`%` PROCEDURE `pro_test_temptb_cursor`(in start_grade int, in end_grade int,out cur_count int)
begindeclare cur_done int default 1;declare var_name varchar(50);declare var_grade int;declare var_birthday date;declare cur_student cursor for select t.name,t.grade,t.birthday from tb_student t where t.grade>=start_grade and t.grade<=end_grade order by t.grade desc;declare continue handler for not found set cur_done = 0;open cur_student;drop table if exists tmp_student;	create temporary table tmp_student (name varchar(50),grade int ,birthday date) engine=memory ;while cur_done <> 0  dofetch next from cur_student into var_name,var_grade, var_birthday ;if cur_done = 1 theninsert into tmp_student values (var_name,var_grade, var_birthday);end if;end while;select count(*) into cur_count from tmp_student;close cur_student;end

存储过程执行测试效果:
测试95-100的学生数量,学生信息保存在临时表;

mysql> call pro_test_temptb_cursor(95,100,@curnum) ;
Query OK, 1 row affected (0.01 sec)mysql> select @curnum;
+---------+
| @curnum |
+---------+
|      12 |
+---------+
1 row in set (0.00 sec)

查询临时表:

mysql> select * from tmp_student t;
+------------+-------+------------+
| name       | grade | birthday   |
+------------+-------+------------+
| UFCKQYIPFD |   100 | 2023-09-23 |
| PYRESDIMBG |    99 | 2023-10-22 |
| WKJVXXFKGY |    99 | 2023-10-25 |
| GTMWQCYWDP |    98 | 2023-11-02 |
| PDSMXIGYNW |    98 | 2023-08-31 |
| OQECTGEEGA |    98 | 2023-07-20 |
| PEKZMUMXIG |    98 | 2023-09-04 |
| IVHWJQYABC |    97 | 2023-10-27 |
| LJMANWXXOQ |    97 | 2023-10-27 |
| ABLSJRRXHE |    96 | 2023-07-15 |
| VBEYEQRYIX |    96 | 2023-07-26 |
| KPFMTKCJGQ |    95 | 2023-10-13 |
+------------+-------+------------+
12 rows in set (0.00 sec)

临时表的特点:

  • 不保存在数据库结构中。
  • 当前会话可查询,如果新建立一个会话,也无法查询tmp_student 表。
  • 假设创建一个和已有的普通表名字相同的临时表,该会话只能看到临时表而看不见同名的普通表。当临时表被删除后,才可以看到普通表。就是说临时表的优先级高于普通表。
mysql> show tables like 'tmp_student';
Empty set (0.00 sec)
(2)通过Python调用存储过程的记录集
from mysql.connector import MySQLConnection, Error
import pymysqlconn = MySQLConnection(**global_config)
cursor = conn.cursor()para =[95,100,0]
result = cursor.callproc('pro_test_temptb_cursor',para)print('result[0]:' ,result[0])
print('result:',result)
print('para:',para)# 测试临时表
sql_string = 'select * from tmp_student t;'
record = cursor.execute(sql_string)print('record:',record)res = cursor.fetchall()
cursor.close()
conn.close()for r in res :print(r)#print(r[0],r[1],r[2])    

执行结果:

result[0]: 95
result: (95, 100, 12)
para: [95, 100, 0]
record: None
('UFCKQYIPFD', 100, datetime.date(2023, 9, 23))
('PYRESDIMBG', 99, datetime.date(2023, 10, 22))
('WKJVXXFKGY', 99, datetime.date(2023, 10, 25))
('GTMWQCYWDP', 98, datetime.date(2023, 11, 2))
('PDSMXIGYNW', 98, datetime.date(2023, 8, 31))
('OQECTGEEGA', 98, datetime.date(2023, 7, 20))
('PEKZMUMXIG', 98, datetime.date(2023, 9, 4))
('IVHWJQYABC', 97, datetime.date(2023, 10, 27))
('LJMANWXXOQ', 97, datetime.date(2023, 10, 27))
('ABLSJRRXHE', 96, datetime.date(2023, 7, 15))
('VBEYEQRYIX', 96, datetime.date(2023, 7, 26))
('KPFMTKCJGQ', 95, datetime.date(2023, 10, 13))

运行结果说明:
1、入口参数的para ,执行完存储过程,没有返回结果,para: [95, 100, 0] 是list,para[2]是0;
2、返回参数result ,执行完存储过程,result: (95, 100, 12) 是元组,result[2]是12 ;
3、record: None ,Python调用存储过程的返回值 ,居然是None ,不是记录数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/146872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql-复合查询

实际开发中往往数据来自不同的表&#xff0c;所以需要多表查询。 1.笛卡尔积 通俗来讲就是两个表的每一列都组合一遍&#xff0c;也就是穷举法。 穷举出来的数据表会有大量重复数据&#xff0c;而我们只需要加上一些限定条件就可以完成有效数据的筛选。 select EMP.ename, EM…

解决:虚拟机远程连接失败

问题 使用FinalShell远程连接虚拟机的时候连接不上 发现 虚拟机用的VMware&#xff0c;Linux发行版是CentOs 7&#xff0c;发现在虚拟机中使用ping www.baidu.com是成功的&#xff0c;但是使用FinalShell远程连接不上虚拟机&#xff0c;本地网络也ping不通虚拟机&#xff0c…

STM32 I2C详解

STM32 I2C详解 I2C简介 I2C&#xff08;Inter IC Bus&#xff09;是由Philips公司开发的一种通用数据总线 两根通信线&#xff1a; SCL&#xff08;Serial Clock&#xff09;串行时钟线&#xff0c;使用同步的时序&#xff0c;降低对硬件的依赖&#xff0c;同时同步的时序稳定…

Rust7.2 More About Cargo and Crates.io

Rust学习笔记 Rust编程语言入门教程课程笔记 参考教材: The Rust Programming Language (by Steve Klabnik and Carol Nichols, with contributions from the Rust Community) Lecture 14: More About Cargo and Crates.io main.rs //Customizing Builds with Release Pro…

Pandas数据分析开发实战博文集锦

本文为最近年来使用Pandas进行数据分析的实践笔记集锦&#xff0c;为了便于博主与爱好者查找相关内容&#xff0c;以及学习、应用过程&#xff0c;进行了初步简单梳理。内容包括&#xff1a;数据分析处理、可视化分析、数据库相关&#xff08;ClickHouse、MongoDB、CSV、MySQL、…

力扣刷题第二十五天--二叉树

前言 二叉树的第一天&#xff0c;掌握前序中序后序遍历&#xff0c;及对应的递归迭代&#xff0c;morris写法。难度一个比一个高是吧。。。 内容 一、二叉树的前序遍历 144.二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 递归 每次…

TensorFlow C++编译及推理

TensorFlow环境配置&#xff1a; Tensorflow c源码编译&#xff08;踩坑版&#xff09; tensorflow C服务开发指南 预测推理代码&#xff1a; C运行TensorFlow模型

【UE5】显示或隐藏物体轮廓线

效果 步骤 1. 先下载所需的材质文件“M_Highlight.uasset” 材质下载链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rxmRhkUoXVq6-DkIKyBhAQ 提取码&#xff1a;55bv 2. 在视口中拖入后期处理体积 根据需求设置后期处理体积的大小或者直接设置无限范围&…

python爬取网站数据,作为后端数据

一. 内容简介 python爬取网站数据&#xff0c;作为后端数据 二. 软件环境 2.1vsCode 2.2Anaconda version: conda 22.9.0 2.3代码 链接&#xff1a; 三.主要流程 3.1 通过urllib请求网站 里面用的所有的包 ! pip install lxml ! pip install selenium ! pip install…

德迅云安全带您了解什么是虚拟内存 - 103.88.35.X

虚拟内存是一种内存管理技术&#xff0c;可以像主内存的一部分一样使用辅助内存。虚拟内存是计算机操作系统 (OS) 中使用的常用技术。 虚拟内存是用硬盘空间做内存来弥补计算机RAM空间的缺乏。当实际RAM满时&#xff08;实际上&#xff0c;在RAM满之前&#xff09;&#xff0c;…

【Linux】U盘安装的cfg引导文件配置

isolinux.cfg文件 default vesamenu.c32 timeout 600display boot.msg# Clear the screen when exiting the menu, instead of leaving the menu displayed. # For vesamenu, this means the graphical background is still displayed without # the menu itself for as long …

ClickHouse查看执行计划

在clickhouse 20.6版本之前要查看SQL语句的执行计划需要设置日志级别为trace才能可以看到&#xff0c;并且只能真正执行sql&#xff0c;在执行日志里面查看。在20.6版本引入了原生的执行计划的语法。在20.6.3版本成为正式版本的功能。 本文档基于目前较新稳定版21.7.3.14。 1.基…

Java声明式事务实战!工作中用这几种就够了!

文章目录 1.几种常用的事务传播行为1.1 REQUIRED1.2 REQUIRES_NEW1.2 NESTED 2. 事务问题2.1 事务不生效&#xff1f;2.2 事务不回滚&#xff1f; 文章会分为两个部分来讲解&#xff0c;第一部分是声明式事务的几种使用场景。第二部分包含事务没有生效&#xff0c;没有回滚的情…

计算两个图形遮盖率

读取图像 首先&#xff0c;加载待处理的图像&#xff0c;可以使用图像处理库&#xff08;例如OpenCV&#xff09;来实现这一步。确保已加载正确的图像。 定义特定颜色范围 确定所需的特定颜色范围。这将是要检测的马赛克填充的颜色。需要指定颜色的下限值和上限值&#xff0c;通…

深度学习中文汉字识别 计算机竞赛

文章目录 0 前言1 数据集合2 网络构建3 模型训练4 模型性能评估5 文字预测6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习中文汉字识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xf…

快速搭建本地的chatgpt

快速搭建本地的chatgpt 参考&#xff1a;一篇文章教你使用Docker本地化部署Chatgpt&#xff08;非api&#xff0c;速度非常快&#xff01;&#xff01;&#xff01;&#xff09;及裸连GPT的方式&#xff08;告别镜像GPT&#xff09;-CSDN博客 前提是linux下 已安装docker 命…

批量下载Sentinel数据脚本2023

批量下载Sentinel数据脚本2023 那些最好的程序员不是为了得到更高的薪水或者得到公众的仰慕而编程&#xff0c;他们只是觉得这是一件有趣的事情&#xff01; 批量下载Sentinel数据脚本2023 批量下载Sentinel数据脚本2023&#x1f33f;前言&#x1f33f;脚本地址&#x1f4e7;Su…

Leetcode—142.环形链表II【中等】

2023每日刷题&#xff08;三十三&#xff09; Leetcode—142.环形链表II 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode *detectCycle(struct ListNode *head) {struct ListNode* …

Codeforces Round 909 (Div. 3) 题解 A-E

目录 A - Game with IntegersB - 250 Thousand Tons of TNTC - Yarik and ArrayD - Yarik and Musical NotesE - Queue Sort A - Game with Integers 原题链接 题目描述 给定一个整数N&#xff0c;A和B都可以对这个整数进行加一或者减一操作&#xff0c;从A开始&#xff0c;如…

2023.11.18 - hadoop之zookeeper分布式协调服务

1.zookeeper简介 ZooKeeper概念: Zookeeper是一个分布式协调服务的开源框架。本质上是一个分布式的小文件存储系统 ZooKeeper作用: 主要用来解决分布式集群中应用系统的一致性问题。 ZooKeeper结构: 采用树形层次结构&#xff0c;没有目录与文件之分,ZooKeeper树中的每个节点被…