PL/SQL存储过程-中国电力负荷数据存储功能-仅供参考

CREATE OR REPLACE PACKAGE BODY ssl AS
  PROCEDURE insert_ssl(s In ssl_array) AS
  v_month varchar2(20);
  v_sql varchar2(5000);
  v_result number;
  v_status number;
  BEGIN
  delete from E_TMP_MP_SSL_CURVE;
  select to_char(s(s.FIRST).data_time,'yyyymm') into v_month from dual;
 v_result:=-10;
    FOR i IN s.FIRST .. s.LAST LOOP
      BEGIN
        INSERT INTO E_TMP_MP_SSL_CURVE(MPED_ID,DATA_TIME,PS_FLAG,P,PA,PB,PC,Q,QA,QB,QC,UA,UB,UC,IA,IB,IC,COS,COSA,COSB,COSC,PAIA,PAIB,PAIC,PAUA,PAUB,PAUC,SAVEDATETIME,P_COEF,Q_COEF,V_COEF,C_COEF,AREA_CODE,FACTOR_COEF)
        VALUES
          (s(i).mped_id, s(i).data_time, s(i).ps_flag, s(i).p ,s(i).pa,s(i). pb,s(i).pc ,s(i).q ,s(i).qa,s(i).qb,s(i).qc,
          s(i).ua,s(i).ub,s(i).uc,s(i).ia,s(i).ib,s(i).ic,
          s(i).cos,s(i).cosa,s(i).cosb,s(i).cosc,s(i).paia,s(i).paib,s(i).paic,s(i).paua,s(i).paub,s(i).pauc
          ,sysdate,1,1,1,1,s(i).AREA_CODE,s(i).FACTOR_COEF);
      END;
    END LOOP;
 v_result:=-20;
    v_sql := 'delete from E_MP_SSL_CURVE_'||v_month||' a where exists (select 1 from E_TMP_MP_SSL_CURVE b where a.MPED_ID = b.MPED_ID and a.DATA_TIME = b.DATA_TIME and a.PS_FLAG = b.PS_FLAG ) ';
    execute immediate v_sql;
 v_result:=-30;
    v_sql := 'insert into E_MP_SSL_CURVE_'||v_month||' (mped_id, data_time, ps_flag, ua, ub, uc, ia, ib, ic, i0, p, pa, pb, pc, q, qa, qb, qc, cos, cosa, cosb, cosc, sp, spa, spb, spc, fn, paia, paib, paic, paua, paub, pauc, temple, avgp, avgq, p_coef, q_coef, v_coef, c_coef, factor_coef, savedatetime, area_code) select * from E_TMP_MP_SSL_CURVE';
    execute immediate v_sql;
commit;

  EXCEPTION
    WHEN OTHERS THEN
      begin
        ROLLBACK;
        v_status := ERROR_LOG(v_result, SQLCODE, SQLERRM, 'insert_ssl');
      end;

  END insert_ssl;
END ssl;
原文地址:https://www.cnblogs.com/Jepson1218/p/5179486.html