Mysql 利用游标遍历查询结果集并操作

举报
隔壁老汪 发表于 2022/06/23 23:41:42 2022/06/23
【摘要】 /*我们有时候会遇到需要对 从A表查询的结果集S_S 的记录 进行遍历并做一些操作(如插入),且这些操作需要的数据或许部分来自S_S集合*//*临时存储过程,没办法,不能直接在查询窗口做这些事。*/drop procedure if exists proc_tmp;create procedure proc_tmp()BEGIN/*这种...

  
  1. /*我们有时候会遇到需要对 从A表查询的结果集S_S 的记录 进行遍历并做一些操作(如插入),且这些操作需要的数据或许部分来自S_S集合*/
  2. /*临时存储过程,没办法,不能直接在查询窗口做这些事。*/
  3. drop procedure if exists proc_tmp;
  4. create procedure proc_tmp()
  5. BEGIN
  6. /*这种写法也可以:
  7. DECLARE
  8. done
  9. INT
  10. DEFAULT
  11. FALSE
  12. ;
  13. */
  14. declare done int default 0; /*用于判断是否结束循环*/
  15. declare hostId bigint; /*用于存储结果集S_S的记录(因为我这里S_S的记录只有一列且为bigint类型)*/
  16. /*定义游标*/
  17. declare idCur cursor for select id from wkp_order where source = '1';
  18. /*定义 设置循环结束标识done值怎么改变 的逻辑*/
  19. declare continue handler for not FOUND set done = 1; /*done = true;亦可*/
  20. open idCur; /*打开游标*/
  21. /* 循环开始 */
  22. REPEAT
  23. /* 如果要fetch多列应该这样写,fetch cur/*对应下面的idCur*/
  24. /*into rowId, rowName; 但是注意rowId和rowName要先declare,且declare cur时也要select两列,且这两列和rowId、rowName对应 */
  25. fetch idCur into hostId; /*这部分可以看看书,还可以fetch多列(假设结果集S_S的记录不是单列的话)*/
  26. if not done THEN /*数值为非0,MySQL认为是true*/
  27. INSERT into wkp_trade_log ( user_id, change_direction , type, order_no, amount, create_time , account_before, account_after) select seller_user_id ,'in','pay',order_no, (total_amount * 0.99) total_amount , create_time, 0 , 0 from wkp_order where source = '1' and id = hostId;
  28. INSERT into wkp_trade_log ( user_id, change_direction , type, order_no, amount, create_time , account_before, account_after) select seller_user_id user_id ,'out','payFee',order_no, (total_amount * 0.01) total_amount , create_time, 0 , 0 from wkp_order where source = '1' and id = hostId;
  29. end if;
  30. until done end repeat;
  31. close idCur; /*关闭游标*/
  32. END
  33. /* 循环结束 */
  34. call proc_tmp();
  35. drop procedure proc_tmp; /*删除临时存储过程*/

文章来源: blog.csdn.net,作者:隔壁老瓦,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/wxb880114/article/details/81017884

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。