MySQL 存储过程游标
一、创建游标
游标用declare语句创建。如下面的例子所示:
create procedure test2()
begin
declare cursorTest cursor for select * from allIntersection;
end;
二、打开、关闭游标
- 打开游标
open cursorTest;
- 关闭游标
close cursorTest;
close 释放游标使用的所有内部内存和资源,因此在每个游标不再需要时都应该关闭。在一个游标关闭后,如果没有重新打开,则不能使用它。但是,声明过的游标不需要再次声明,用 open 语句打开它就可以了。
三、使用游标数据
在一个游标被打开后,可以使用 fetch 语句分别访问它的每一行。fetch 语句指定检索什么数据(所需的列),检索出来的数据存储在什么地方。它还向前移动游标中的内部行指针,使下一条 fetch 语句检索下一行(不重复读取同一行)。
create procedure test3()
begin
declare o int; -- 声明一个局部变量
declare cursorTest3 cursor for select ID from allintersection; -- 声明一个游标
open cursorTest3; -- 打开游标
fetch cursorTest3 into o; -- 获取Inter
sectionName close cursorTest3; -- 关闭游标
end;
其中 fetch 用来检索当前行的 IntersectionName 列(将自动从第一行开始)到一个名为 o 的局部声明的变量中。对检索出的数据部做任何处理
四、式例
create procedure test4()
begin
declare done boolean default ;
declare o int; -- 声明一个局部变量
declare cursorTest4 cursor for select ID from allintersection;-- 声明一个游标
declare continue handler for sqlstate '' set done=;
open cursorTest4; -- 打开游标
repeat -- 遍历所有的行
fetch cursorTest4 into o; -- 获取IntersectionName
until done end repeat; -- 结束循环
close cursorTest4; -- 关闭游标
end;
与 test3 不同的是,这个例子中的 fetch 是在 repeat 内,因此它反复执行到 done 为真( until done end repeat; 规定)。为使它起作用,用一个default 0(假,不结束)定义变量done。那么,done怎样才能在结束时被设置为真呢?答案是用以下语句:
declare continue handler for sqlstate '' set done=;
这条语句定义了一个 continue handler,它是在条件出现时被执行的代码。这里,它指出 sqlstate '02000'出现时,set done=1。sqlstate '02000'是一个未找到条件,当repeat 由于没有更多的行供循环而不能继续时,出现这个条件。
create procedure `test5` ()
begin
-- 需要定义接收游标数据的变量
declare a char();
-- 游标
declare cursorTest5 cursor for select i from t;
-- 遍历数据结束标志
declare done int default false;
-- 将结束标志绑定到游标
declare continue handler for not found set done = true;
-- 打开游标
open curosrTest5; -- 开始循环
read_loop: loop
-- 提取游标里的数据,这里只有一个,多个的话也一样;
fetch cursorTest5 into a;
-- 声明结束的时候
if done then
leave read_loop;
end if;
-- 这里做你想做的循环的事件 insert into t values (a); end loop;
-- 关闭游标
close curosrTest5; end
注意,变量的定义不要和你的select的列的键同名!不然,fetch into 会失败!
MySQL 存储过程游标的更多相关文章
- MySQL存储过程 游标
MySQL存储过程 游标 如何在存储过程中使用MySQL游标来遍历SELECT语句返回的结果集 MySQL游标简介 要处理存储过程中的结果集,请使用游标.游标允许您迭代查询返回的一组行,并相应地处理 ...
- mysql存储过程游标嵌套循环
自己写的一个mysql存储过程如下: BEGIN DECLARE _did bigint(20);DECLARE _count int;DECLARE s1 int;DECLARE cur_1 CUR ...
- MySQL 存储过程/游标/事务
将会用到的几个表 mysql> DESC products; +------------+--------------+------+-----+---------+-------------- ...
- php调用mysql存储过程游标
<?php $dbtype = 'mysql'; $host = 'localhost'; $dbname = 'test'; $dsn = "$dbtype:host=$host;d ...
- mysql存储过程游标加计划任务事件调度器
存储过程加事件调度器 -- 存储过程 (多个)游标的使用 临时表的使用(让执行时间从一个小时降低到5分钟)DELIMITER $$ DROP PROCEDURE IF EXISTS `eval_cal ...
- mysql 存储过程 游标嵌套
基本表temp 包括 name, type, sendCity, getCity 分别对应物流送货司机名, 倒车的第几段, 发货城市, 收货城市 表结构 -- -------------------- ...
- mysql存储过程 --游标的使用 取每行记录 (多字段)
delimiter $ create PROCEDURE phoneDeal() BEGIN DECLARE id varchar(64); -- id DECLARE phone1 varchar( ...
- mysql 存储过程 -- 游标的使用(备忘)
BEGIN ; DECLARE f_ratio FLOAT DEFAULT 0.8; ); ); DECLARE i_statDate DATE; DECLARE i_accumulateCount ...
- mysql 存储过程 游标的使用 与定义
1.游标的作用及属性 游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作:游标有下面这些属性: a.游标是只读的,也就是不能更新它: b.游标是不能滚动的,也就是只能在一个方向上进 ...
随机推荐
- welcome to learn prgram
Tips for your suceess(成功的秘诀) 1. Practice every day(每天练习) 每天用两小时来学习.你可以使用各种零碎时间,积少成多.你可以使用搞这些时间用来巩固练习 ...
- php基础之gd图像生成、缩放、logo水印和简单验证码实现
gd库是php最常用的图片处理库之一(另外一个是imagemagick),可以生成图片.验证码.水印.缩略图等等.要使用gd库首先需要开启gd库扩展,windows系统下需要在php.ini中将ext ...
- 【转】精选30个优秀的CSS技术和实例
今天,我为大家收集精选了30个使用纯CSS完成的强大实践的优秀CSS技术和实例,您将在这里发现很多与众不同的技术,比如:图片集.阴影效果.可扩展按钮.菜单等-这些实例都是使用纯CSS和HTML实现的. ...
- NAT穿越
1.NAT类型 目前主要的NAT类型有如下几种: 1)Full-cone NAT, also known as one-to-one NAT 一旦一个内网地址 (iAddr:iPort) 被映射到一个 ...
- java 实现文件下载
需求:把每天产生的日志文件,从服务器上下载下来 File file = new File(path); // 根据路径,获取File String filename = file.getName(); ...
- Bash 中的环境变量
在 Bash 里,可以通过 export 命令查看当前 Shell 进程的环境变量,这些环境变量一些是 Bash 自己创建的,还有一些是 Bash 从父进程继承来的,然而需要注意的是,父进程传给 Ba ...
- [Kerberos] User Ticket Management
Kerberos客户端常用命令包括 kinit, klist, kdestroy, and kpasswd,用户使用这些命令管理自己的 ticket. 此外,每台运行Kerberos的机器应该都配置/ ...
- 2012 Multi-University Training Contest 9 / hdu4389
2012 Multi-University Training Contest 9 / hdu4389 打巨表,实为数位dp 还不太懂 先这样放着.. 对于打表,当然我们不能直接打,这里有技巧.我们可以 ...
- Linux C popen()函数详解
表头文件 #include<stdio.h> 定义函数 FILE * popen( const char * command,const char * type); 函数说明 popen( ...
- Go - 函数/方法 的 变参
变参 本质上就是一个切片.只能接收一个或多个同类型参数,且 必须放在参数列表的 尾部. func test(s string, a ...int) { fmt.Printf("%T, %v\ ...