CREATE OR REPLACE PROCEDURE
PRC_WAP_ACTIVEUSERS(RETCODE OUT VARCHAR2)
/***********************************************************
*
功能:WAP名額--活躍使用者統計(分批送出)
參數:RETCODE(傳回編碼:0000成功)
* 作者:
建立時間:2013-01-16
版本:1.0
修改人:
修改時間:
**********************************************************/
IS
RET_CODE
VARCHAR2(6);
--錯誤資訊代碼
RET_MSG
VARCHAR2(200);
--錯誤資訊
V_LAST_MONTH
VARCHAR2(8); --上個月份
V_FIRST_DAY_MONTH
VARCHAR2(10); --上個月第一天
V_END_DAY_MONTH
VARCHAR2(10); --上個月第二天
V_COUNT
NUMBER;
--計數變量
V_COMMITNUM CONSTANT NUMBER :=1000000;--一次送出記錄數(預設一百萬)
BEGIN
--程式開始
DBMS_OUTPUT.PUT_LINE(‘PRC_WAP_ACTIVEUSERS BEGIN : ‘ ||
TO_CHAR(SYSDATE, ‘YYYY-MM-DD HH24:MI:SS‘));
RET_CODE :=
‘0000‘;
--傳回編碼初始化
V_COUNT :=
0;
--計數器初始化
--申明遊标
DECLARE
TYPE CUR_DATA_TYPE IS
RECORD --定義動态遊标資料類型
(
PHONE_NUM
VARCHAR2(20), --電話号碼
LOGIN_TIMES
VARCHAR2(2000)); --通路次數
VRECORD
CUR_DATA_TYPE;
--定義資料類型
BEGIN
SELECT
TO_CHAR(ADD_MONTHS(LAST_DAY(SYSDATE), -1), ‘YYYYMM‘)
INTO V_LAST_MONTH
FROM DUAL;
TO_CHAR(ADD_MONTHS(LAST_DAY(SYSDATE) + 1, -2), ‘YYYYMMDD‘)
INTO V_FIRST_DAY_MONTH
TO_CHAR(ADD_MONTHS(LAST_DAY(SYSDATE), -1), ‘YYYYMMDD‘)
INTO V_END_DAY_MONTH
FOR VRECORD IN (SELECT TEL AS
PHONE_NUM, COUNT(T.TEL) AS LOGIN_TIMES
FROM TEMP_BOSS_BIP1A021 T
WHERE T.DAY_ID BETWEEN V_FIRST_DAY_MONTH AND
V_END_DAY_MONTH HAVING COUNT(T.TEL) >=
2
GROUP BY T.TEL) LOOP
INSERT INTO
T_BIP1A021
(PHONE_NUM, LOGIN_TIMES,
LOGIN_MONTH)
VALUES
(VRECORD.PHONE_NUM,
VRECORD.LOGIN_TIMES, V_LAST_MONTH);
IF ((MOD(V_COUNT, V_COMMITNUM)) = 0)
THEN
COMMIT;
--求餘:一百萬送出一次
END IF;
V_COUNT := V_COUNT + 1;
END LOOP;
COMMIT;
DBMS_OUTPUT.PUT_LINE(‘PRC_WAP_ACTIVEUSERS END: ‘
||
EXCEPTION
WHEN OTHERS THEN
BEGIN
ROLLBACK;
RET_CODE :=
‘0001‘;
RET_MSG
:= ‘存儲過程 PRC_WAP_ACTIVEUSERS 執行錯誤!‘ ||
CHR(10) ||
‘錯誤代碼:‘ || SQLCODE || CHR(10) || ‘錯誤資訊:‘ ||
SUBSTR(SQLERRM, 1, 128);
GOTO TOEND;
END;
END;
--傳回程式運作結果
<<TOEND>>
RETCODE := RET_CODE;
IF (RET_CODE
= ‘0000‘) THEN
RET_MSG :=
‘運作成功!‘;
ELSE
RET_MSG := ‘運作失敗!‘ || RET_MSG;
ROLLBACK;
END IF;
DBMS_OUTPUT.PUT_LINE(RET_MSG);
DBMS_OUTPUT.PUT_LINE(‘END TIME : ‘ ||
END PRC_WAP_ACTIVEUSERS;