本帖最后由 chenyonge 于 2010-07-28 21:25:58 编辑

解决方案 »

  1.   

    --未调试,自己动手调试一下
    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;