CREATE OR REPLACE PROCEDURE proc_forecast_copy (
   p_bu             VARCHAR2,
   p_plnt           VARCHAR2,
   p_fc_no          VARCHAR2,
   p_user           VARCHAR2,
   p_out_fc   OUT   VARCHAR2
)
IS 
   CURSOR c1
   IS
      SELECT *
        FROM mfg_sales_forecast_hd
       WHERE msfhd_bu = p_bu
         AND msfhd_plnt = p_plnt
         AND msfhd_fcast_no = p_fc_no;
 
   cr1       c1%ROWTYPE;
 
   TYPE t1 IS RECORD (
      msfln_bu             mfg_sales_forecast_ln.msfln_bu%TYPE,
      msfln_plnt           mfg_sales_forecast_ln.msfln_plnt%TYPE,
      msfln_fcast_no       mfg_sales_forecast_ln.msfln_fcast_no%TYPE,
      msfln_seq_no         mfg_sales_forecast_ln.msfln_seq_no%TYPE,
      msfln_prod_id        mfg_sales_forecast_ln.msfln_prod_id%TYPE,
      msfln_prod_rev       mfg_sales_forecast_ln.msfln_prod_rev%TYPE,
      msfln_sales_area     mfg_sales_forecast_ln.msfln_sales_area%TYPE,
      msfln_terr_id        mfg_sales_forecast_ln.msfln_terr_id%TYPE,
      msfln_sub_terr_id    mfg_sales_forecast_ln.msfln_sub_terr_id%TYPE,
      msfln_sales_person   mfg_sales_forecast_ln.msfln_sales_person%TYPE,
      msfln_bucket         mfg_sales_forecast_ln.msfln_bucket%TYPE,
      msfln_fcast_qty      mfg_sales_forecast_ln.msfln_fcast_qty%TYPE,
      msfln_cre_by         mfg_sales_forecast_ln.msfln_cre_by%TYPE,
      msfln_cre_date       mfg_sales_forecast_ln.msfln_cre_date%TYPE,
      msfln_upd_by         mfg_sales_forecast_ln.msfln_upd_by%TYPE,
      msfln_upd_date       mfg_sales_forecast_ln.msfln_upd_date%TYPE,
      msfln_cust_id        mfg_sales_forecast_ln.msfln_cust_id%TYPE
   );
 
   TYPE t2 IS TABLE OF t1;
 
   t3        t2;
   v_fc_no   mfg_sales_forecast_ln.msfln_fcast_no%TYPE;
BEGIN
   SELECT MAX (NVL (msfhd_fcast_no, 0)) + 1
     INTO v_fc_no
     FROM mfg_sales_forecast_hd
    WHERE msfhd_bu = p_bu AND msfhd_plnt = p_plnt;
 
   OPEN c1;
   FETCH c1 INTO cr1;
 
   INSERT INTO mfg_sales_forecast_hd
               (msfhd_bu, msfhd_plnt, msfhd_fcast_date, msfhd_fcast_no,
                msfhd_name,
                msfhd_fcast_level, msfhd_cons_flag,
                msfhd_fwd_cons_days, msfhd_bkd_cons_days, msfhd_cre_by,
                msfhd_cre_date, msfhd_status, msfhd_upd_by, msfhd_upd_date,
                msfhd_date_from, msfhd_date_to, msfhd_name2, msfhd_fc_mthd,
                msfhd_fc_prd)
        VALUES (p_bu, p_plnt, SYSDATE, v_fc_no,
                'Forecast for' || '  ' || TO_CHAR (SYSDATE, 'MON'),
                cr1.msfhd_fcast_level, cr1.msfhd_cons_flag,
                cr1.msfhd_fwd_cons_days, cr1.msfhd_bkd_cons_days, p_user,
                SYSDATE, 'E', NULL, NULL,
                SYSDATE, (SYSDATE + 30), cr1.msfhd_name2, cr1.msfhd_fc_mthd,
                cr1.msfhd_fc_prd);
 
   CLOSE c1;
 
   SELECT p_bu,p_plnt,v_fc_no,msfln_seq_no, msfln_prod_id, msfln_prod_rev, msfln_sales_area,
          msfln_terr_id, msfln_sub_terr_id, msfln_sales_person,
          msfln_bucket, msfln_fcast_qty,p_user,sysdate,null,null, msfln_cust_id
     BULK COLLECT INTO t3
     FROM mfg_sales_forecast_ln
    WHERE msfln_bu = p_bu AND msfln_plnt = p_plnt AND msfln_fcast_no = p_fc_no;
 
   FORALL i IN 1 .. t3.COUNT
      INSERT INTO mfg_sales_forecast_ln VALUES t3(i);                                                                                                                                                                                                            
   COMMIT;
END;


No comments:
Post a Comment