两张表,一张用于记录每个项目所获得的奖金总额度,一张用于记录各个项目参与人员的等级及可获得奖金额度,现在新建一张表,需要将每个项目的奖金按参与人员的级别高低进行分配插入,按参与人员级别高低进行逐级分配,尾数分配给最后一个人,写了个游标可是总是不能获得想要的结果,希望好心人能帮下忙
DECLARE
lading_bill_wt_temp NUMBER;
lot_number_wt_temp NUMBER;
temp NUMBER;
count1 NUMBER;
lot_number_temp VARCHAR2 (30);
weight_temp NUMBER;
scrq_temp VARCHAR2 (30);
rownum_temp NUMBER; CURSOR bill_rec
IS
SELECT lading_bill_no, a.item_code, lading_bill_wt, //每个项目的奖金总额
TO_NUMBER (b.invent_item_id) inventory_item_id,
a.big_lading_bill_no
FROM sgl.tlebl01 a, sgs.tsosoa11 b
WHERE a.big_lading_bill_no = 'D99291'
AND a.item_code = b.pc;
BEGIN
FOR rec IN bill_rec
LOOP
for rec1 in ( SELECT weight, lot_number, scrq
FROM xc_lot_newsgp
WHERE inventory_item_id = rec.inventory_item_id //每个项目的参与人员级别可获奖金额度
ORDER BY scrq)
loop
IF rec.lading_bill_wt<rec1.weight //当项目奖总额小于该项目最高级别人员可获得的奖金额时
THEN
INSERT INTO sgl.tlebl05_inter2
(lading_bill_no, big_lading_bill_no,
pono_no, bal_wt
)
VALUES (rec.lading_bill_no, rec.big_lading_bill_no,
rec1.lot_number, rec.lading_bill_wt
);
ELSIF rec.lading_bill_wt=rec1.weight//当项目奖总额等于该项目最高级别人员可获得的奖金额时
THEN
INSERT INTO sgl.tlebl05_inter2
(lading_bill_no, big_lading_bill_no,
pono_no, bal_wt
)
VALUES (rec.lading_bill_no, rec.big_lading_bill_no,
rec1.lot_number, rec.lading_bill_wt
);
ELSIF rec.lading_bill_wt>rec1.weight//当项目奖总额大于该项目最高级别人员可获得的奖金额时
THEN
if rec.lading_bill_wt-rec1.weight>0
then INSERT INTO sgl.tlebl05_inter2
(lading_bill_no, big_lading_bill_no,
pono_no, bal_wt
)
VALUES (rec.lading_bill_no, rec.big_lading_bill_no,
rec1.lot_number, rec1.weight
);
end if;
END IF; END LOOP;
end loop; COMMIT;
END;
DECLARE
lading_bill_wt_temp NUMBER;
lot_number_wt_temp NUMBER;
temp NUMBER;
count1 NUMBER;
lot_number_temp VARCHAR2 (30);
weight_temp NUMBER;
scrq_temp VARCHAR2 (30);
rownum_temp NUMBER; CURSOR bill_rec
IS
SELECT lading_bill_no, a.item_code, lading_bill_wt, //每个项目的奖金总额
TO_NUMBER (b.invent_item_id) inventory_item_id,
a.big_lading_bill_no
FROM sgl.tlebl01 a, sgs.tsosoa11 b
WHERE a.big_lading_bill_no = 'D99291'
AND a.item_code = b.pc;
BEGIN
FOR rec IN bill_rec
LOOP
for rec1 in ( SELECT weight, lot_number, scrq
FROM xc_lot_newsgp
WHERE inventory_item_id = rec.inventory_item_id //每个项目的参与人员级别可获奖金额度
ORDER BY scrq)
loop
IF rec.lading_bill_wt<rec1.weight //当项目奖总额小于该项目最高级别人员可获得的奖金额时
THEN
INSERT INTO sgl.tlebl05_inter2
(lading_bill_no, big_lading_bill_no,
pono_no, bal_wt
)
VALUES (rec.lading_bill_no, rec.big_lading_bill_no,
rec1.lot_number, rec.lading_bill_wt
);
ELSIF rec.lading_bill_wt=rec1.weight//当项目奖总额等于该项目最高级别人员可获得的奖金额时
THEN
INSERT INTO sgl.tlebl05_inter2
(lading_bill_no, big_lading_bill_no,
pono_no, bal_wt
)
VALUES (rec.lading_bill_no, rec.big_lading_bill_no,
rec1.lot_number, rec.lading_bill_wt
);
ELSIF rec.lading_bill_wt>rec1.weight//当项目奖总额大于该项目最高级别人员可获得的奖金额时
THEN
if rec.lading_bill_wt-rec1.weight>0
then INSERT INTO sgl.tlebl05_inter2
(lading_bill_no, big_lading_bill_no,
pono_no, bal_wt
)
VALUES (rec.lading_bill_no, rec.big_lading_bill_no,
rec1.lot_number, rec1.weight
);
end if;
END IF; END LOOP;
end loop; COMMIT;
END;
解决方案 »
- rman恢复问题
- oracle的树形查询有谁比较了解
- 我的存储过程exec执行后 表中无数据...
- 我是小白 帮帮我..
- plsql编译导致无响应的问题,请帮忙
- oracle分页后排序不正常的问题
- 数据库和VB.NET的连接问题
- 怎么把一个oracle数据库复制到另外一台机器上。waiting...
- 谁有在oracle下pl/sql调用用c语言编写的dll的例子?
- 为什么dbms_metadata.getddl('TABLE','TEST')取到的表结构不全
- OracleInProcServer.XOraSession 不能创建对象错误!
- 在装oracle 11g的时候出现 由于以下错误,Enterprise Manager 配置失败
是什么意思,你写的判断逻辑是不是有问题啊,跟你上面需求描述的不一样