MySQL 游标SQL语句是“面向集合编程”,重点在于“获得什么”,而不是“如何获得”。有时候我们不需要对查询结构集的每一条都进行相同的操作,而是只操作其中的某些行,这时候就需要面向过程的编程方法,而游标就是面向过程编程方式的体现游标就相当于“指针”,它一次只指向一行游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作游标的使用声明(给定结果集)、打开、通过游标获取数据、关闭、释放游标声明...
一 sqlserver游标使用/*** 游标的使用 讲了这个多游标的优点,现在我们就亲自来揭开游标的神秘的面纱。 使用游标的顺序: 声名游标、打开游标、读取数据、关闭游标、删除游标。1.3.1声明游标 最简单游标声明:DECLARE <游标名>CURSOR FOR<SELECT语句>;其中select语句可以是简单查询,也可以是复杂的接连查询和嵌套查询 例子:[已表2 AddSalary为例子] Declare mycursor cursor for select * from AddSalary 这样我就对表AddSala...
游标的作用:游标提供了一种对从表中检索出的数据进行操作的灵活手段。通过使用游标,使SQL这种面向集合的语言有了面向过程开发的能力。如何使用游标:在MySQL数据库中,可以在存储过程、函数、触发器、或者事件中使用游标。使用时需要与handler一起,并且游标要在handler之前定义。游标具有三个属性:(1)Asensitive:数据库也可以选择不复制结果集;(2)Read only:不可更新;(3)Nonscrollable:游标只能向一个方向前进,并且...
BEGIN
/*计算用户提成总金额*/declare amountPrice,pays,rates,goodsPrice DECIMAL(10,2) DEFAULT 0;
DECLARE flag int,getUserId;
#if(userlevel=1) then
SELECT member_id into getUserId from 33hao_member where openid=open_iddeclare cur cursor for select commission1_rate rates,commission1_pay pays,goods_price from 33hao_goods_common;DECLARECONTINUE HANDLER FOR NOT FOUND SET flag=1;SET flag=0;
OPEN cur;
...
一 前言本篇内容是关于mysql游标和触发器的知识,学习本篇的基础是知识追寻者之前发过的文章(公众号读者看专辑)《SQL-你真的了解什么SQL么?》《SQL-小白最佳入门sql查询一》《SQL-小白最佳入门sql查询二》《SQL- 多年开发人员都不懂的插入与更新删除操作注意点》《SQL-SQL事物操作》《SQL-Mysql数据类型》《SQL-mysql视图的前世今生》《SQL-mysql储存过程》公众号:知识追寻者知识追寻者(Inheriting the spirit of open source,...
从mysqlV5.5开始,进行了一次大的改变,就是将InnoDB作为默认的存储引擎。InnoDB支持事务,而且拥有相关的RDBMS特性:ACID事务支持,数据完整性(支持外键),灾难恢复能力等等。
现在简单总结一下游标的知识。
(一),认识游标(cursor)
就是一个可读的标识,用来标识数据取到什么地方了。
(二),游标特性
1,只读 2,不滚动 3,不敏感的
(三),使用游标
需要强调的是,游标必须在定义处理程序之前被定义,但变量必须在定...
在操作mysql的时候我们知道MySQL检索操作返回一组称为结果集的行。这组返回的行都是与 SQL语句相匹配的行(零行或多行)。使用简单的 SELECT语句,例如,没有办法得到第一行、下一行或前 10行,也不存在每次一行地处理所有行的简单方法(相对于成批地处理它们)。有时,需要在检索出来的行中前进或后退一行或多行。这就是使用游标的原因。游标( cursor)是一个存储在MySQL服务器上的数据库查询,它不是一条 SELECT语句,而是被该语...
BEGINDECLARE no_more_record INT DEFAULT 0; DECLARE f_id BIGINT; DECLARE p_m DECIMAL(18,4); DECLARE p_account_pre DECIMAL(18,4); DECLARE p_account DECIMAL(18,4); DECLARE cur_record CURSOR FOR SELECT fund_id, money, account_money from fund_record where user_id=1040 ORDER BY fund_id ASC; /*首先这里对游标进行定义*/ DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_record = 1; /*这个是个条件...
PROCEDURE `test`.`new_procedure` ()
BEGINDECLARE done INT DEFAULT FALSE;-- 需要定义接收游标数据的变量 DECLARE a CHAR(16);-- 游标DECLARE cur CURSOR FOR SELECT i FROM test.t;-- 遍历数据结束标志DECLARE done INT DEFAULT FALSE;-- 将结束标志绑定到游标DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;-- 打开游标OPEN cur1;-- 开始循环read_loop: LOOP-- 提取游标里的数据,这里只有一个,多个的话也一样;FE...
转自:http://blog.sina.com.cn/s/blog_544c72960101bvl3.html
这是一个游标的使用例子.
但是其中有几点需要注意,就是为什么要加入 declare CONTINUE HANDLER FOR SQLSTATE ‘02000‘ SET tmpname= null;这样的一句话.
如果不加的话将直接报错.No data - zero rows fetched, selected, or processed另外也有人提示过这样的经验:
经验之谈:在MYSQL的存储过程一般要设个变量来跟踪是否NOT FOUNDDECLARE IS_FOUND INTEGER DEFAULT 1;...
PROCEDURE pro_users()
beginDECLARE myid int;DECLARE no int;DECLARE mysellerid char(10); DECLARE mylink char(50); DECLARE myip char(50); DECLARE mycursor CURSOR FOR select id from table1; #把select出来的数据全部保存到游标mycursor中DECLARE CONTINUE HANDLER FOR NOT FOUND SET no=1; #当读到数据的最后一条时,设置no变量为1SET no=0; #初始化变量no为0OPEN mycursor; #打开游标while no=0 do #判断是不是...
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;
DELIMITER...
/*计算用户提成总金额*/
declare amountPrice,pays,rates,goodsPrice DECIMAL(10,2) DEFAULT 0;
DECLARE flag int,getUserId;
#if(userlevel=1) thenSELECT member_id into getUserId from 33hao_member where openid=open_iddeclare cur cursor for select commission1_rate rates,commission1_pay pays,goods_price from 33hao_goods_common;DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag=1;SET flag=0;
OPEN cur;
REPEA...
BEGIN DECLARE Done INT DEFAULT 0; DECLARE v_id VARCHAR(50); DECLARE v_content text; DECLARE f_content text;
/*声明游标*/DECLARE rs CURSOR FOR SELECT id,content FROM cms_activity_data_121;/*异常处理*/DECLARE CONTINUE HANDLER FOR SQLSTATE ‘02000‘ SET Done=1;/*打开游标*/OPEN rs;/*逐个取出当前记录LingQi字段的值,需要进行最大值的判断*/FETCH NEXT FROM rs INTO v_id,v_content;/*遍历数据表*/REPEA...
if exists proc_tmp;
create procedure proc_tmp()
BEGIN/*这种写法也可以:DECLARE done INT DEFAULT FALSE;*/
declare done int default 0; /*用于判断是否结束循环*/
declare hostId bigint; /*用于存储结果集S_S的记录(因为我这里S_S的记录只有一列且为bigint类型)*/
/*定义游标*/
declare idCur cursor for select A.HostId from dev_host as A, sys_hostconfig as B where A.HostId != B.HostId;/*定义 设置循环结束标识d...