sql - 存储过程中没有为 Cursor 运行循环
问题描述
我写了一个查询,我选择了 2 列,这些是大约 40 条记录。
现在我想通过一一选择对这些记录进行总和计算。
在我的存储过程中,我使用了一个游标来存储这 40 条记录。并使用 for 循环并对这些记录进行总和计算(一一)
但是对于第一条记录, sum 为空,我的循环没有从游标中获取另一条记录。
这就是为什么我无法一一计算每条记录的总和,因为我的 for 循环不再运行。
cursor details is
select distinct lpn_id v_olpn_id, lpn_detail_id v_olpn_detail_id
from lpn_detail ld
where size_value > '0'
and lpn_id in
( select lpn_id from lpn
where lpn_facility_status > '15'
and lpn_facility_status < '90'
and inbound_outbound_indicator = 'O' )
and item_id in
( select item_id from item_cbo where catch_weight_item = '1' )
and not exists
( select 1 from lpn_catch_weight lwc
where lwc.lpn_detail_id = ld.lpn_detail_id );
begin
for detail in details
loop
select sum(ld.ref_num4*td.qty_pulld) into v_total_weight
from lpn_detail ld, lpn l, task_dtl td
where l.lpn_id = ld.lpn_id
and l.tc_lpn_id=td.cntr_nbr
and ld.item_id=td.item_id
and l.lpn_id in
( select lpn_id from lpn where tc_lpn_id in
( select cntr_nbr from task_dtl
where carton_nbr in
( select tc_lpn_id from lpn
where lpn_id=detail.v_olpn_id ) ) )
and ld.ref_num4 is not null
and td.invn_need_type = 60
group by ld.item_id;
end loop;
解决方案
它可能会帮助你解决你的问题....
DECLARE
CURSOR CUR_DAILY_UPDATE IS
select id, amount,status from trxn;
REC_LON_UP CUR_DAILY_UPDATE%ROWTYPE;
BEGIN
OPEN CUR_DAILY_UPDATE;
LOOP
FETCH CUR_DAILY_UPDATE INTO REC_LON_UP;
EXIT WHEN CUR_DAILY_UPDATE%NOTFOUND;
UPDATE trxn_dup FINAL_TAB
SET FINAL_TAB.amount = REC_LON_UP.amount
,FINAL_TAB.status = REC_LON_UP.status
WHERE FINAL_TAB.id = REC_LON_UP.id;
END LOOP;
COMMIT;
CLOSE CUR_DAILY_UPDATE;
END;
此块代码在 oracle 11g 中运行良好
推荐阅读
- python - 将矩阵附加到 numpy 数组
- android - 约束布局在设备/模拟器上不可见
- npm - 如何使用 npm 解决分辨率错误?
- visual-studio - 更改 Visual Studio Code 的用户配置文件
- javascript - 如何将网站插入 React 组件
- r - 在 Shiny 中调整日期格式
- windows - 如何将 MarkLogic 从 Windows Server 2013R2 平滑升级到 Windows Server 2019?
- javascript - 相对于服务器根目录的 HREF
- python - 我可以将列用作行并保留现有行吗?
- html - 如何使悬停延迟:之后