mysql 游标使用实例_mysql 存储过程使用游标实例

CREATE DEFINER=`root`@`%` PROCEDURE`get_driver_nearconsumer`(

in_groupidint,

in_serviceidint)BEGIN

declare temp_id int;declare temp_x decimal(10,6);declare temp_y decimal(10,6);declare temp_c_x decimal(10,6);declare temp_c_y decimal(10,6);DECLARE done bool defaultFALSE;DECLARE cur1 CURSOR FOR SELECT int_driver,dec_x,dec_y FROM(selectd.*, a.vc_name asgrouparea_name , g.dec_x,g.dec_y,g.dt_sc

,c.dcount,dd.consumer_name,dd.vc_fadd,dd.vc_tadd,dd.int_service,dd.int_statusfrombi_driver dleft joinbi_gisdata gon g.int_mubiao = d.int_driver and g.int_type = 1

left joinbi_grouparea aon a.int_grouparea =d.int_arealeft join(select count(1) asdcount,int_driverfrombi_serviceinfowhere int_status >-1 and int_status < 100 group byint_driver

) con c.int_driver =d.int_driverleft join(selectint_service,consumer_name,vc_fadd,vc_tadd,int_driver,int_statusfromv_serviceinfowhere int_service in(select int_service frombi_serviceinfowhere int_status >-1 and int_status < 100 and ifnull(int_driver,0)>0

group byint_driver)

) ddon dd.int_driver =d.int_driverwhere int_area = in_groupid and g.dt_sc>DATE_ADD(CURRENT_TIMESTAMP,INTERVAL -1HOUR)

) cur_table;DECLARE CONTINUE HANDLER FOR NOT FOUND SET done =true;#结束标识DROP TABLE IF EXISTSr_table ;CREATE TEMPORARY TABLEr_tableselectd.*, a.vc_name asgrouparea_name , g.dec_x,g.dec_y,g.dt_sc

,c.dcount,dd.consumer_name,dd.vc_fadd,dd.vc_tadd,dd.int_service,dd.int_status

,g.dec_xasdistance#添加一列记录距离frombi_driver dleft joinbi_gisdata gon g.int_mubiao = d.int_driver and g.int_type = 1

left joinbi_grouparea aon a.int_grouparea =d.int_arealeft join(select count(1) asdcount,int_driverfrombi_serviceinfowhere int_status >-1 and int_status < 100 group byint_driver

) con c.int_driver =d.int_driverleft join(selectint_service,consumer_name,vc_fadd,vc_tadd,int_driver,int_statusfromv_serviceinfowhere int_service in(select int_service frombi_serviceinfowhere int_status >-1 and int_status < 100 and ifnull(int_driver,0)>0

group byint_driver)

) ddon dd.int_driver =d.int_driverwhere int_area = in_groupid and g.dt_sc>DATE_ADD(CURRENT_TIMESTAMP,INTERVAL -1Hour) ;

#delete fromr_table;set temp_c_x =(select dec_fx from bi_serviceinfo where int_service =in_serviceid );set temp_c_y =(select dec_fy from bi_serviceinfo where int_service =in_serviceid);

#selecttemp_c_x,temp_c_y;OPENcur1;

fetchSeqLoop:LoopFETCH cur1 INTOtemp_id,temp_x,temp_y;if done thenleave fetchSeqLoop;else#selecttemp_id,temp_x,temp_y;update r_table set distance = f_getdistance(temp_c_x,temp_c_y,temp_x,temp_y) where int_driver =temp_id;end if;endLoop;CLOSEcur1;select * from r_table where distance < 2000 order bydistance;drop tabler_table;END

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值