mysql存储过程输出结果集
概述一直以来,觉得MySQL中使用\G参数改变输出结果集的显示方式非常好用,尤其是在命令行界面。但是ORACLE数据库没有这个功能,今天在搜索到Tom大师的一篇博文时,发现大师用一个存储过程print...
2024.11.15当查询的结果需要一条一条的进行处理的时候,可以使用游标来遍历结果集中的每一条数据。
游标可以循环处理查询结果集数据。
下面将会介绍sql的语句和游标的用法:
insert,update,drop, delete 是插入,修改,删除表,删除记录用的,因此没有返回结果。
select返回单行变量。
select语句返回的记录可以传给本地变量(select .. into)。
select语句返回多行结果集时,可使用MySQL的游标来对结果集的每一条记录进行循环处理。
存储过程返回的多行结果集是可以被客户端程序(如javaweb,php等)接收,
但不能在一个存储过程中接收另一个存储过程的结果集,
一般解决办法是将存储过程返回的多行结果集存入一张临时表中,以供其它的过程使用。
定义游标declare cursor_name CURSOR FOR SELECT_statement;
cursor_name是游标的名称。
SELECT_statement 是查询语句,该语句返回查询的结果集。
定义的游标cursor_name代表返回的结果集。
打开游标就可以对游标定义的结果集进行循环处理。
OPEN 打开游标OPEN cursor_name;
FETCH 获取游标当前指针的一行记录,将这一行记录传给指定变量列表接收。注意:变量数必须与MySQL游标返回的字段数一致。
要获得多行数据,使用循环语句去执行FETCH。
即,使用循环语句去循环取游标中的每一条记录,然后将记录中所有字段值传给对应的变量。
这样使用游标就能对结果集做循环处理。
循环语句:REPEAT
FETCH cursor_name INTO variable list;
UNTIL DONE END REPEAT;
FETCH语句:FETCH可以取一条记录中的所有字段数据,并配合INTO 将字段值传给变量。
FETCH cursor_name INTO variable list;
CLOSE关闭游标CLOSE cursor_name ;
MySQL的游标是向前只读的也就是只能顺序地从开始往后读取结果集,不能从后往前,也不能直接跳到中间的记录。
游标可以复用。
关闭游标再打开游标会回到结果集第一条记录。
创建存储过程,并使用游标。循环取游标返回的记录所有字段的值传给变量。
CREATE PROCEDURE testEndHandle1()
BEGIN
declare done BOOLEAN DEFAULT 0;
declare tmp_uid INT DEFAULT 0;
declare tmp_uage INT DEFAULT 0;
declare tmp_uname VARCHAR(255);
declare t_index CURSOR FOR select t_user.user_id, t_user.user_age, t_user.user_name FROM t_user;
-- 写法一:declare CONTINUE HANDLER FOR NOT FOUND SET done=1;
-- declare CONTINUE HANDLER FOR NOT FOUND SET done = 1;
-- 写法二:declare CONTINUE HANDLER FOR SQLSTATE ‘02000‘ SET done = 1;
declare CONTINUE HANDLER FOR SQLSTATE ‘02000‘ SET done = 1;
OPEN t_index;
REPEAT
FETCH t_index INTO tmp_uid,tmp_uage,tmp_uname;
IF done!=1 THEN
select tmp_uid,tmp_uage,tmp_uname;
END IF;
UNTIL DONE END REPEAT;
CLOSE t_index;
END;
--drop PROCEDURE IF EXISTS testEndHandle1;
call testEndHandle1();
概述一直以来,觉得MySQL中使用\G参数改变输出结果集的显示方式非常好用,尤其是在命令行界面。但是ORACLE数据库没有这个功能,今天在搜索到Tom大师的一篇博文时,发现大师用一个存储过程print...
2024.11.15概述在数据库的开发过程中,经常会遇到复杂的业务逻辑和对数据库的操作,这个时候就会用存储过程来封装数据库操作。如果项目的存储过程较多,书写又没有一定的规范,将会影响以后的系统维护困难和大存储过程逻辑的难...
2024.11.13目录二:MySQL存储过程变量及赋值三:MySQL存储过程的创建2. 使用navicat创建一个存储过程3. 存储过程中的参数:IN OUT INOUT四:MySQL存储过程的管理1. MySQL存储...
2024.11.15前言:方向:java -Spring MVC - Mybatis - SQL实战目标:Mybatis中调用存储过程,接收存储过程的返回数据;案例必备小知识:Spring MVC , Mybatis ,...
2024.11.15前言 日常开发中,可能会用到数据库的自定义函数/存储过程,本文记录MySQL对自定义函数与存储过程的创建、使用、删除的使用 通用语法 事实上,可以认为存储过程就是没有返回值的函数,创建/使用...
2024.11.12