码迷,mamicode.com
首页 > 数据库 > 详细

sql 游标

时间:2014-11-19 23:35:10      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:io   ar   os   for   数据   on   amp   tt   数据库   

1、存储过程中有专门的定义域,在begin后。有些时候你要查询数据库,而查询的条件是要在你设置之后才进行查询的,这时候照样是不能把定义该游标放在这个设置之后,其实前面定义游标只做定义,不会进行查询,只有当你取游标的时候才会进行查询,这时候你设的值自然就进去了!

2、定义游标的查询语句比较慢,或者说可能会查询会锁表,我们要用查询语句后加上with ur,防止查询锁表。

3、定义域最后可以定义异常处理

declare exit handler for sqlexception begin values(SQLSTATE, SQLCODE) into p_o_sqlstate, p_o_sqlcode; set P_O_RESULT = ‘EXECUTION FAILED‘; end;

这里当存储过程执行异常,会自动运行到这里,讲异常状态跟code设置到相应的字段里:values(SQLSTATE, SQLCODE) into p_o_sqlstate, p_o_sqlcode

4、循环取数据的时有多种循环方法,比如

a、while do

end while;

b、cmpd1:loop

leave cmpd1;--数据没了,结束loop,离开loop

iterate cmpd1;--结束当前的,继续下一个

end loop cmpd1;

5、游标的用法,打开游标,然后取值,最后关闭,一般取游标的值都是跟循环语句联合用的

OPEN cur_mcht_day_payType_income;

FETCH cur_mcht_day_payType_income into v_merchant_id,v_total_order_amount,v_totalcount,v_fee,v_total_mcht_settle_fee,v_pay_type;

close cur_mcht_day_payType_income;

6、游标跟循环语句联合用

open cs_batch_date; cmpd1:loop

set v_batchDate=null; FETCH cs_batch_date INTO v_batchDate; if v_batchDate is null then leave cmpd1; end if;
SET v_p_i_timestamp = char(v_batchDate)||‘ 00:00:00‘; call MCHT_DAILY_REVENUE_REPORT(v_p_i_timestamp,P_O_SQLSTATE,P_O_SQLCODE,P_O_RESULT); set RESULT = RESULT+1;
end loop cmpd1;
close cs_batch_date;

sql 游标

标签:io   ar   os   for   数据   on   amp   tt   数据库   

原文地址:http://www.cnblogs.com/chengliping/p/4109312.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!