1. 程式人生 > >批量操作資料方法(例項)

批量操作資料方法(例項)

儲存過程中有兩種資料輸出方法:
(一)
一種是利用EXECUTE IMMEDIATE SQL using....執行動態sql,一次批量將資料輸入到臨時表中,然後利用遊標進行輸出
     execute immediate SQL bulk collect into (record/table) 執行動態sql
(1) PROCEDURE PRO_SASCOLLECTMONEY(PARAMETERS IN varchar2, re_cursor OUT t_cursor) IS
    sel := 'INSERT INTO EPCISLOGTMP.TMP_SAS_COLLECT_MONEY_REPORT
            (DEPARTMENT_CODE,
             GROUP_CODE,
             g_health_net_collect)
             SELECT * FROM (
                  SELECT se.DEPARTMENT_CODE,
                   se.last_group_code GROUP_CODE,
                   SUM(DECODE(T.CPP, ''2H'', T.NET_COLLECT, 0)) g_health_net_collect
              FROM (SELECT  /*+INDEX(t2 IX_SAS_C_C_EMPLOYEE_CODE)  */
                           T2.EMPLOYEE_CODE,
                           T2.PERSON_GROUP_FLAG ||DECODE(T2.PLAN_CLASS_CODE,''A'',''A'',''B'',''A'', ''C'', ''C'', ''K'',''H'',''J'',''J'',T2.PLAN_CLASS_CODE) CPP,
                           SUM(T2.COLLECT_AMOUNT) COLLECT_AMOUNT,
                           SUM(T2.STANDARD_AMOUNT) STANDARD_AMOUNT,
                           SUM(T2.NET_COLLECT) NET_COLLECT
                      FROM SAS_COLLECT_CHANNEL    T2,
                           DEPARTMENT_RELATION    T3,
                           EPCISBASE.SAS_EMPLOYEE T4
                     WHERE T4.DEPARTMENT_CODE = T3.CHILD_DEPARTMENT_CODE
                       AND T3.PARENT_DEPARTMENT_CODE = :v_departmentCode_epcis
                       AND T2.YEAR = :v_queryYear_epcis
                       AND T2.MONTH BETWEEN :v_queryBeginMouth_epcis AND :v_queryEndMouth_epcis
                       AND T2.EMPLOYEE_CODE = T4.EMPLOYEE_CODE '
             || v_filter ||
                    'AND (NVL(T4.TYPE, ''x'') != ''03'' OR (T4.TYPE = ''03'' AND (T4.AGENT_CODE = ''0'' OR NOT EXISTS
                         (SELECT 1
                              FROM SAS_AGENT T
                             WHERE T.AGENT_CODE = T4.AGENT_CODE
                               AND T.AGENT_MARK = ''1''))))
                    GROUP BY T2.EMPLOYEE_CODE,
                              T2.PERSON_GROUP_FLAG,
                              DECODE(T2.PLAN_CLASS_CODE,''A'',''A'',''B'',''A'', ''C'', ''C'', ''K'',''H'',''J'',''J'',T2.PLAN_CLASS_CODE)) T,
                     EPCISBASE.SAS_EMPLOYEE  se
              WHERE t.EMPLOYEE_CODE = se.employee_code
              GROUP BY se.last_group_code,se.EMPLOYEE_CHANNEL,se.EMPLOYEE_NAME,se.DEPARTMENT_CODE,se.EMPLOYEE_CODE )
              WHERE ROWNUM < :counter_limit  ';