关于Oracle存储过程for循环的问题,菜鸟急求解答

[复制链接]
查看11 | 回复9 | 2021-1-27 06:31:05 | 显示全部楼层 |阅读模式
现在有两张临时表,表A有25条数据,表B有588条数据,目标是将表A中的每条数据和表B中的每条数据组合成一条新的数据存入表C中,照道理,应该会有25*588=14700条数据,因为涉及到调差,所以我采用了游标,并使用双层for循环来组合数据,出来的结果总是25*25*588=367500条数据,请问这是怎么回事?
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:31:05 | 显示全部楼层



回复

使用道具 举报

千问 | 2021-1-27 06:31:05 | 显示全部楼层


如上两图,采用的一个存储过程调用另一个存储过程的方式
回复

使用道具 举报

千问 | 2021-1-27 06:31:05 | 显示全部楼层
select*froma,b这条语句就可以生成25*588条符合你的要求的数据
回复

使用道具 举报

千问 | 2021-1-27 06:31:05 | 显示全部楼层
没看懂你什么意思,建议贴出完整的代码
回复

使用道具 举报

千问 | 2021-1-27 06:31:05 | 显示全部楼层
首先楼上正解,只需要select*froma,b,得出的就是a表和b表的笛卡尔积。
然后虽然没有看到你所有的代码,但是猜测一下,你的第一个存储过没有问题,但是第二个的时候

注释里的控制循环数量,可以认为你下面有个循环是用这个数量来控制循环结束的,但是你接着又写了一个for游标的循环,这说明,你的第二个存储过程有两个循环,加上第一个存储过程的一个循环,刚好25*25*588=367500,如果你说的25条数据的表是FSOBRANCHD_T这张表的话,那应该就是这样没错了。
回复

使用道具 举报

千问 | 2021-1-27 06:31:05 | 显示全部楼层
引用5楼qq_38206656的回复:首先楼上正解,只需要select*froma,b,得出的就是a表和b表的笛卡尔积。
然后虽然没有看到你所有的代码,但是猜测一下,你的第一个存储过没有问题,但是第二个的时候

注释里的控制循环数量,可以认为你下面有个循环是用这个数量来控制循环结束的,但是你接着又写了一个for游标的循环,这说明,你的第二个存储过程有两个循环,加上第一个存储过程的一个循环,刚好25*25*588=367500,如果你说的25条数据的表是FSOBRANCHD_T这张表的话,那应该就是这样没错了。

第二个存储过程里的控制循环的变量,是在下面的逻辑里做了一个if、else判断,并且在游标打开之前获取的,这样会有影响吗?谢谢
回复

使用道具 举报

千问 | 2021-1-27 06:31:05 | 显示全部楼层
forpolicyCurinpolicyCursorloop本身就是一个循环,而且是控制循环次数的那种,次数就是policyCuersor存储数据的行数。
你的ifelse是判断什么的?V_count的大小是FSOBRANCHD_T的行数,和policyCuersor的行数是一个值。不是重复了吗
要是不是我理解的这样就贴出所有的代码。
回复

使用道具 举报

千问 | 2021-1-27 06:31:05 | 显示全部楼层
这么点数据量,还写循环干嘛,直接插入就可以了。
insertintoC表select这里写A表和B表的相应字段,顺序要和C表的字段一致,每个字段逗号分隔。fromA表,B表;
commit;
回复

使用道具 举报

千问 | 2021-1-27 06:31:05 | 显示全部楼层
把A表b表的数据插入新的表中用触发器做好一点
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行