落地时间 公司 库存量 前周库存量
20121202 T 45
20121203 T 66
20121204 T 22
20121125 V 78
上面是表结构,类型:落地时间varchar2(20),公司varchar2(200),库存量number.脚本如下:
declare
cursor get_row is select 落地时间, 公司,库存量
from AAATEST;
v1 get_row%rowtype;
cc varchar2(200);
tt varchar2(20);
last_week number:=0;
begin
open get_row;
loop fetch get_row into v1;
exit when get_row %notfound;begin
select 公司,落地时间, sum(库存量)/7
into cc,tt,last_week
from AAATEST
where 公司=v1.公司 and 落地时间 between
to_char(to_date( v1.落地时间,'yyyymmdd')) and
to_char(to_date(v1.落地时间,'yyyymmdd')-7)
group by 公司,落地时间;update AAATEST
set 前周库存量=last_week
where 公司=v1.公司 and 落地时间=v1.落地时间;
commit;end;
end loop;
close get_row;end;
但总出现ORA_01403 未找到数据的错误提示试了加异常处理,但只更新的小部分数据,或出现ORA_01422等等一系列的问题,感觉自己的逻辑出现了问题,求各位给出一个好的思路,正确的脚本,谢谢了,在线等!
20121202 T 45
20121203 T 66
20121204 T 22
20121125 V 78
上面是表结构,类型:落地时间varchar2(20),公司varchar2(200),库存量number.脚本如下:
declare
cursor get_row is select 落地时间, 公司,库存量
from AAATEST;
v1 get_row%rowtype;
cc varchar2(200);
tt varchar2(20);
last_week number:=0;
begin
open get_row;
loop fetch get_row into v1;
exit when get_row %notfound;begin
select 公司,落地时间, sum(库存量)/7
into cc,tt,last_week
from AAATEST
where 公司=v1.公司 and 落地时间 between
to_char(to_date( v1.落地时间,'yyyymmdd')) and
to_char(to_date(v1.落地时间,'yyyymmdd')-7)
group by 公司,落地时间;update AAATEST
set 前周库存量=last_week
where 公司=v1.公司 and 落地时间=v1.落地时间;
commit;end;
end loop;
close get_row;end;
但总出现ORA_01403 未找到数据的错误提示试了加异常处理,但只更新的小部分数据,或出现ORA_01422等等一系列的问题,感觉自己的逻辑出现了问题,求各位给出一个好的思路,正确的脚本,谢谢了,在线等!
declare
cursor AAATEST_cur is
select * from AAATEST for update of 前周库存量 nowait;
v_lastweek number;
begin
for r in AAATEST_cur loop
select sum(库存量)
into v_lastweek
from AAATEST
where 落地时间 between to_date(r.落地时间, 'yyyymmdd') - 7 and
to_date(r.落地时间, 'yyyymmdd')
and 公司=r.公司;
update AAATEST
set 前周库存量 = v_lastweek
where current of AAATEST_cur;
end loop;
加了一个commit,测试成功
declare
cursor AAATEST_cur is
select * from AAATEST for update of 前周库存量 nowait;
v_lastweek number;
begin
for r in AAATEST_cur loop
select sum(库存量)
into v_lastweek
from AAATEST
where to_date(落地时间,'yyyymmdd') between to_date(r.落地时间, 'yyyymmdd') - 7 and
to_date(r.落地时间, 'yyyymmdd')
and 公司=r.公司;
update AAATEST
set 前周库存量 = v_lastweek
where current of AAATEST_cur;
end loop;
commit;
end ;
update语句中适当修改