批量操作資料方法(例項)
阿新 • • 發佈:2019-01-08
儲存過程中有兩種資料輸出方法:
(一)
一種是利用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 ';
(一)
一種是利用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 ';