日期:2014-05-17  浏览次数:21150 次

请教游标处理过程中的问题-详见描述
本帖最后由 hk1688 于 2012-11-05 12:47:17 编辑 总体描述:
数据表table_a中有各个公司的数据,版本标识为0,如果是父节点的公司会有另一版本的数据,版本标识为1,我现在需要计算这两个版本的差异(新的公司公司数据:ID在原有几次公司ID前加9即可,版本标识为0),oracle11GR2,用游标处理。一下图解可以简单描述过程。

源数据表
公司ID(unit_id) 版本标识(ver) 数据值(dvalue)
1        1         260
1        0         45
11        0         80
12        1         90
12        0         50
121        0         20
122        0         30
13        0         60

想要结果
公司ID(unit_id) 版本标识(ver) 数据值(dvalue)
1         1         260
1         0         45
11         0         80
12         1         90
12         0         50
121         0         20
122         0         30
13         0         60
912         0         -10 注:=90-(50+20+30)
91         0         -15 注:=260-(45+80+50+20+30+60+(-10))

目前结果
公司ID(unit_id) 版本标识(ver) 数据值(dvalue)
1         1         260
1         0         45
11         0         80
12         1         90
12         0         50
121         0         20
122         0         30
13         0         60
912         0         -10
91         0         -25 注:=260-(45+80+50+20+30+60)也就是说,没有把游标第一次算出来的数据"-10"算进去。

以下就是处理过程:
procedure proc1 is
  v_unit_id varchar2(100);
  --定义游标
  cursor c1 is
    select t.unit_id
    from table_a t
    where t.ver = 1
    order