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.游标是不能滚动的,也就是只能在一个方向上进 ...
随机推荐
- HTML5新标签 w3c
w3c标准下的HTML5新标签 ,做个归纳总结: H5标签 定义和用法 兼容性 <artical> 规定独立的自包含内容, 支持html中的全局属性, 支持html中的事件属性 IE: 支 ...
- asp.net mvc 通过T4模板生成框架
http://www.cnblogs.com/rdst/archive/2012/08/13/2637210.html http://www.kuqin.com/shuoit/20140716/341 ...
- Java框架Struts2
struts2的核心和工作原理 在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标 Struts设计的第一目标就是使MVC模式应用于we ...
- Node+Express+node-mysql 实战于演习 全套mysql(增删改查)
最近这段时间研究Node感觉不错,自己做了一个增删改查,虽然有些简陋,但是思想是想通的,其实所有项目都是增删改查,有助于初学者快速掌握Node 首先 本实例展示的是基于Node+Express+nod ...
- 循环中的continue功能
在oracle存储过程中,有时我们希望在循环中为某种情况时不做任何处理,类似于c语言中的continue,跳过本次循环:在oracle 11g中好像增加了这个关键字,在之前版本中我们可以通过如下方式来 ...
- PHP如何自动识别第三方Restful API的内容,自动渲染成 json、xml、html、serialize、csv、php等数据
如题,PHP如何自动识别第三方Restful API的内容,自动渲染成 json.xml.html.serialize.csv.php等数据? 其实这也不难,因为Rest API也是基于http协议的 ...
- 【重装系统】线上Linux服务器(2TB)分区参考方案
如果是线上服务器,假设它是 2TB 的 SATA 硬盘.8GB 内存,建议按如下方式进行分区: / 20480M(20G)(主分区) /boot 128M swap 10240M /data 2016 ...
- sql中case when语句的使用-来自网摘文章
Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...
- cookie中文乱码
在学习当中碰到cookie中文乱码问题,问题原因:cookie对中文不太支持,将中文放入cookie中会报错误. 解决办法: 1.编码 将中文进行编码再放入cookie中: String userna ...
- Python入门(二)
Python版本:Python 2.7.5 1.列表切片 >>> numbers = [1,2,3,5,6,7,8] >>> numbers[3] 5 >&g ...