急,请教Mysql存储过程退出循环的问题

发布于 2021-11-08 19:54:08 字数 510 浏览 912 评论 7

编写一个MySQL的存储过程:循环入库单并逐条取出货品ID,根据货品ID分别去查询对应的出库和报账情况。算法如下:

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

declare 入库单货品游标;

open 游标;

fetch 一条货品ID

        ①根据货品ID,获取对应的出库记录;(select into 临时变量)

        ②根据货品ID,获取对应的报账记录;

close 游标;

存在一个问题:如果其中某个货品ID没有对应的出库记录或报账记录,就会触发not found,并退出游标。但实际是,即便该货品ID没有对应的记录,希望还是继续遍历全部的货品。

如何解决当语句①②为空时,不触发done=1并退出游标这个问题?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

你曾走过我的故事 2021-11-09 12:16:47

使用MySQL真是崩溃啊,莫名其妙地退出循环,又没有调试工具 - -#

坐在坟头思考人生 2021-11-09 11:03:11

现在为了解决语句①②不抛出not found异常,改成这样:

select count(*) 
  into _count
  from 表A 
 where 条件A;
if _count then
  select sum(*) 
    into 变量A
    from 表A
   where 条件A; -- 这边又重复上面的条件,而且条件很长
end if;  

感觉这样写,很多代码都是重复累赘,能否有其他方法解决?

 

爱的那么颓废 2021-11-09 09:56:41

有没有可以调试存储过程的MySQL工具?

谢绝鈎搭 2021-11-09 07:39:58

如果查询的结果是数值的话可以用例如下面的语句:

SELECT COALESCE(SUM(view_count),0) INTO @RVS FROM xxxx WHERE .....

无人问我粥可暖 2021-11-09 05:24:19

我发现如果查询结果为空,而仍然使用select into语句,则会触发not found。莫非我每次都要使用select count(*)来判断记录是否为空,再使用select into赋值?能否有更优雅的解决方法?

绝情姑娘 2021-11-08 22:30:13

伪码:

OPEN cursor1;

REPEAT
  FETCH cursor1 INTO f1, f2, f3, f4;
  IF NOT done THEN
	①根据货品ID,获取对应的出库记录;(select into 临时变量)
	②根据货品ID,获取对应的报账记录;
	IF NOT 出库记录 AND NOT 报账记录 THEN
		SET done = TRUE;
	ELSE
		-- 执行相应处理
	END IF;
  END IF;
 UNTIL done END REPEAT;
本宫微胖 2021-11-08 21:24:02

十分紧急,今天要解决掉,恳请帮忙!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文