--未调试,自己动手调试一下 CREATE OR REPLACE PROCEDURE p_getdate(i_enddate DATE, i_layer VARCHAR2(20)) IS v_begindate DATE; v_enddate DATE; v_layer VARCHAR2(20); BEGIN UPDATE b SET b.开始时间 = i_enddate - 周期 WHERE 本层 = i_layer RETURNING 开始时间 INTO v_begindate; v_layer := i_layer; LOOP v_endate := v_begindate; SELECT 本层 INTO v_layer FROM a WHERE 上层 = v_layer; EXIT WHEN v_layer = '0_'; UPDATE b SET b.开始时间 = v_enddate - b.周期, b.结束时间 = v_enddate WHERE 本层 = v_layer RETURNING 开始时间 INTO v_begindate; END LOOP; END;
CREATE OR REPLACE PROCEDURE p_getdate(i_enddate DATE, i_layer VARCHAR2(20)) IS
v_begindate DATE;
v_enddate DATE;
v_layer VARCHAR2(20);
BEGIN
UPDATE b
SET b.开始时间 = i_enddate - 周期
WHERE 本层 = i_layer
RETURNING 开始时间 INTO v_begindate;
v_layer := i_layer;
LOOP
v_endate := v_begindate;
SELECT 本层 INTO v_layer FROM a WHERE 上层 = v_layer;
EXIT WHEN v_layer = '0_';
UPDATE b
SET b.开始时间 = v_enddate - b.周期, b.结束时间 = v_enddate
WHERE 本层 = v_layer
RETURNING 开始时间 INTO v_begindate;
END LOOP;
END;