sql 游标

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;

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。