oracle存储过程更新一段时间的数据,给定一个时间,更新这个时间之后的一段时间的表中一些字段的数据

有个时间 reportdate ,有日产 rc ,月产量 ycl , 年产量 ncl
例如20130220 的月产量 就等于20130201--20130219的日产量的和+20120220当天的日产量
我要修改20130105的日产量,他就会影响到20130106--20130130的数据 月产量
怎么用oracle存储过程实现

第1个回答  推荐于2018-04-19
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;本回答被提问者和网友采纳
相似回答