现在有两张临时表,表A有25条数据,表B有588条数据,目标是将表A中的每条数据和表B中的每条数据组合成一条新的数据存入表C中,照道理,应该会有25*588=14700条数据,因为涉及到调差,所以我采用了游标,并使用双层for循环来组合数据,出来的结果总是25*25*588= 367500条数据,请问这是怎么回事?

解决方案 »

  1.   

    select * from a,b这条语句就可以生成25*588条符合你的要求的数据
      

  2.   

    首先楼上正解,只需要select * from a,b,得出的就是a表和b表的笛卡尔积。然后虽然没有看到你所有的代码,但是猜测一下,你的第一个存储过没有问题,但是第二个的时候注释里的控制循环数量,可以认为你下面有个循环是用这个数量来控制循环结束的,但是你接着又写了一个for游标的循环,这说明,你的第二个存储过程有两个循环,加上第一个存储过程的一个循环,刚好25*25*588= 367500,如果你说的25条数据的表是FSOBRANCHD_T这张表的话,那应该就是这样没错了。
      

  3.   

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

  4.   

    for policyCur in policyCursor loop 本身就是一个循环,而且是控制循环次数的那种,次数就是policyCuersor存储数据的行数。
    你的if else是判断什么的?V_count的大小是FSOBRANCHD_T的行数,和policyCuersor的行数是一个值。不是重复了吗
    要是不是我理解的这样就贴出所有的代码。
      

  5.   

    这么点数据量,还写循环干嘛,直接插入就可以了。
    insert into C表 select 这里写A表和B表的相应字段,顺序要和C表的字段一致,每个字段逗号分隔。 from A表,B表; 
    commit;