以下的文章主要介绍的是MySQL游标的使用笔记,其可以用在存储过程的SQL语句,其主要类型主要有以下几种,以下就是对其详细介绍,相信如果你掌握了这项技术,会在以后的学习或是工作中带来很大的帮助。
1、 无返回结果语句,如:INSERT,UPDATE,DROP, DELETE等
2、 select语句返回单行变量并可传给本地变量(select ..into)
3、 返回多行结果集的select语句,并可使用MySQL游标循环处理
注意,存储过程返回的多行结果集,可以被客户端程序(如php)所接收,但要在一个存储过程中接收另一个存储过程的结果集是不可能的,一般解决办法是存入临时表供其它过程共用
4、 prepare语句
以下主要讲述游标及prepare部分
游标 定义
DECLARE cursor_name CURSOR FOR SELECT_statement;
游标操作 OPEN 打开游标
OPEN cursor_name;
FETCH 获取游标当前指针的记录,并传给指定变量列表,注意变量数必须与MySQL游标返回的字段数一致,要获得多行数据,使用循环语句去执行FETCH
FETCH cursor_name INTO variable list;
CLOSE关闭游标
CLOSE cursor_name ;
注意:MySQL的游标是向前只读的,也就是说,你只能顺序地从开始往后读取结果集,不能从后往前,也不能直接跳到中间的记录.
一个完整的例子:
定义本地变量
DECLARE o varchar(128);
定义游标
DECLARE ordernumbers CURSOR FOR SELECT callee_name FROM account_tbl where acct_timeduration=10800; DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_departments=1; SET no_more_departments=0;
打开游标
OPEN ordernumbers;
循环所有的行
REPEAT -- Get order number FETCH ordernumbers INTO o; update account set allMoneyallMoney=allMoney+72,lastMonthConsumelastMonthConsume=lastMonthConsume-72 where NumTg=@o;
循环结束
UNTIL no_more_departments END REPEAT;
关闭游标
CLOSE ordernumbers;
变量定义:
declare variable_name [,variable_name...] datatype [default value];
其中,datatype为mysql的数据类型,如:int, float, date, varchar(length)
例:
declare l_int int unsigned default 4000000; declare l_numeric numeric(8,2) default 9.95; declare l_date date default '1999-12-31'; declare l_datetime datetime default '1999-12-31 23:59:59'; declare l_varchar varchar(255) default 'this will not be padded';
变量赋值
set 变量名 = 表达式值 [,variable_name = expression ...]
参数
mysql存储过程的参数用在存储过程的定义,共有三种参数类型,in,out,inout
create procedure|function([[in |out |inout ] 参数名 数据类形...])
in 输入参数
表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
out 输出参数
该值可在存储过程内部被改变,并可返回
inout 输入输出参数
调用时指定,并且可被改变和返回
建存储过程:
语法:
create procedure p()
begin
end
create procedure productpricing()
begin
select avg(pro_price) as priceaverage
from products;
end;
# begin…end之间是存储过程的主体定义
# mysql的分界符是分号(;)
调用存储过程的方法是:
# call加上过程名以及一个括号
# 例如调用上面定义的存储过程
call productpricing();
/*初始化*/ drop procedure if exists useCursor // /*建立 存储过程 create */ CREATE PROCEDURE useCursor() BEGIN /*局部变量的定义 declare*/ declare tempName varchar(50) DEFAULT ''; /*局部变量的定义 生命长度 设置默认值 declare*/ declare allName VARCHAR(4000) DEFAULT ''; /*创建游标*/ declare cur1 CURSOR for select username from trade_01.f_user; /* 设置游标异常 捕捉捕获异常停止游标 * 并设置 循环使用 变量 tmpname 为 null 跳出循环。*/ DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET tempName = NULL; /*开始游标*/ OPEN cur1; /*游标向下走一步*/ FETCH cur1 INTO tempName; /*循环游标*/ WHILE (tempName is not null) DO set tempName=CONCAT(tempName,";"); /*拼接名称*/ set allName= CONCAT(allName,tempName); FETCH cur1 INTO tempName; END WHILE; /*关闭游标*/ CLOSE cur1; /*输出拼接名称*/ select allName; END /*调用存储过程*/ call useCursor()//
相关推荐
Mysql存储过程游标触发器
在“mysql存储过程_游标_项目练习”中,我们可能需要完成以下任务: 1. 创建存储过程:编写SQL语句来定义一个存储过程,包括输入参数(如果需要的话)、处理逻辑以及返回值(可选)。 2. 使用游标:在存储过程中...
"Oracle存储过程游标详解" Oracle 存储过程游标是指在 Oracle 数据库中使用游标来实现对结果集的处理和操作。游标可以分为静态游标和REF游标两种类型。静态游标是指结果集已经确实(静态定义)的游标,可以进一步...
总结来说,这个示例展示了如何在MySQL存储过程中使用游标进行循环处理,并在循环内部再次嵌套游标以实现更精细的数据操作。这种技术在处理大量数据或执行复杂逻辑时非常有用,尤其是在需要逐行检查和处理数据的情况...
总结来说,MySQL存储过程中的游标和循环机制提供了强大的数据处理能力。通过游标,我们可以逐行处理数据,结合循环结构,能够灵活地实现复杂的数据操作逻辑。在实际应用中,这些工具常用于批量插入、更新、计算统计...
在MySQL中,游标是一种数据库对象,主要用于处理存储过程中的结果集。游标允许我们逐行地读取查询结果,这对于需要对每一行数据执行特定操作的情况非常有用。通过使用游标,我们可以实现更加灵活的数据处理逻辑。 #...
MySQL中的动态游标是数据库处理过程中非常有用的一个特性,它允许在存储过程中逐行处理查询结果。在本示例中,我们将深入探讨如何在MySQL中使用动态游标,特别是结合存储过程来实现这一功能。 首先,创建了一个名为...
mysql存储过程 多个游标循环(依次执行,非嵌套循环)REPEAT循环。有需要的可自行下载。
本篇文章将详细讨论在MySQL存储过程中如何使用游标循环,并特别关注如何进行跳出和继续操作。 首先,游标循环通常有三种基本形式:`LOOP`、`REPEAT`和`WHILE`。每种循环结构都有其特定的语法和用途,但核心思想都是...
MySQL 存储过程与游标的混合使用,也没啥重要的,就是和其他数据库有一些不同而已,作为总结,以后复习
根据提供的文件信息,本文将详细解释一个MySQL存储过程的例子,其中包含了游标的使用。这个存储过程主要用于处理一批数据,涉及到日期范围内的数据处理、异常处理等。下面将逐一解析存储过程中涉及的重要知识点。 #...
本文实例讲述了mysql存储过程之返回多个值的方法。分享给大家供大家参考,具体如下: mysql存储函数只返回一个值。要开发返回多个值的存储过程,需要使用带有INOUT或OUT参数的存储过程。咱们先来看一个orders表它的...
Mysql存储过程、游标、函数调用、事务处理、触发器代码示例,可用作学习参考。
本资源结合实例实现一个复杂的存储过程,存储过程中有用到游标、临时表、循环、递归等知识,sql文件附有实例数据表创建的sql语句。
MySql存储过程,游标的使用方法,速度极快!
总的来说,通过学习“mysql经典教程+mysql存储过程讲解”,你不仅可以掌握MySQL的基础操作,还能深入了解如何利用存储过程、触发器和游标来实现更复杂的数据管理策略。这将有助于你成为一名更高效的数据库管理员或...
除了基础的游标操作,MySQL还支持其他特性,如:嵌套游标(一个游标内部使用另一个游标)、可滚动游标(允许向前和向后移动)以及隐式游标(无需显式声明,常在存储过程中使用)。 在实际应用中,游标常常用于以下...