oracle存储过程更新一段时间的数据,给定一个时间,更新这个时间之后的一段时间的表中一些字段的数据
有个时间reportdate,有日产rc,月产量ycl,年产量ncl例如20130220的月产量就等于20130201--20130219的日产量的和+20120220当...
有个时间 reportdate ,有日产 rc ,月产量 ycl , 年产量 ncl
例如20130220 的月产量 就等于20130201--20130219的日产量的和+20120220当天的日产量
我要修改20130105的日产量,他就会影响到20130106--20130130的数据 月产量
怎么用oracle存储过程实现 展开
例如20130220 的月产量 就等于20130201--20130219的日产量的和+20120220当天的日产量
我要修改20130105的日产量,他就会影响到20130106--20130130的数据 月产量
怎么用oracle存储过程实现 展开
1个回答
展开全部
CREATE OR REPLACE PROCEDURE test_xh(vi_date IN VARCHAR2,vi_rc IN NUMBER)
IS
v_date VARCHAR2(8);
e_date VARCHAR2(8);
b_date VARCHAR2(8);
BEGIN
v_date := vi_date;
b_date := substr(v_date,1,6)||'01';
e_date := '20130210';
--更新指定日期的日产量
UPDATE test_1 a SET a.rc = vi_rc WHERE a.reportdate = v_date;
COMMIT;
--循环开始,判断当前日期大于截止日期时跳出,小于时更新月累计
LOOP
IF v_date>e_date THEN
EXIT;
END IF;
UPDATE test_1 a SET a.ycl=(
SELECT SUM(b.rc) from test_1 b WHERE b.reportdate>=b_date AND b.reportdate<=v_date )
WHERE a.reportdate = v_date;
COMMIT;
v_date:=to_char(to_date(v_date,'YYYYMMDD')+1,'YYYYMMDD') ;
END LOOP;
END;
IS
v_date VARCHAR2(8);
e_date VARCHAR2(8);
b_date VARCHAR2(8);
BEGIN
v_date := vi_date;
b_date := substr(v_date,1,6)||'01';
e_date := '20130210';
--更新指定日期的日产量
UPDATE test_1 a SET a.rc = vi_rc WHERE a.reportdate = v_date;
COMMIT;
--循环开始,判断当前日期大于截止日期时跳出,小于时更新月累计
LOOP
IF v_date>e_date THEN
EXIT;
END IF;
UPDATE test_1 a SET a.ycl=(
SELECT SUM(b.rc) from test_1 b WHERE b.reportdate>=b_date AND b.reportdate<=v_date )
WHERE a.reportdate = v_date;
COMMIT;
v_date:=to_char(to_date(v_date,'YYYYMMDD')+1,'YYYYMMDD') ;
END LOOP;
END;
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询