- 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;
-
- SELECT
TO_CHAR(ADD_MONTHS(LAST_DAY(SYSDATE) + 1, -2), ‘YYYYMMDD‘)
- INTO V_FIRST_DAY_MONTH
- FROM DUAL;
-
- SELECT
TO_CHAR(ADD_MONTHS(LAST_DAY(SYSDATE), -1), ‘YYYYMMDD‘)
- INTO V_END_DAY_MONTH
- FROM DUAL;
-
- 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: ‘
||
-
TO_CHAR(SYSDATE, ‘YYYY-MM-DD HH24:MI:SS‘));
- 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 :=
‘运行成功!‘;
- COMMIT;
- ELSE
- RET_MSG := ‘运行失败!‘ || RET_MSG;
- ROLLBACK;
- END IF;
-
- DBMS_OUTPUT.PUT_LINE(RET_MSG);
-
- DBMS_OUTPUT.PUT_LINE(‘END TIME : ‘ ||
-
TO_CHAR(SYSDATE, ‘YYYY-MM-DD HH24:MI:SS‘));
-
- END PRC_WAP_ACTIVEUSERS;
oracle 游标例子,布布扣,bubuko.com
oracle 游标例子
原文:http://www.cnblogs.com/sayou/p/3736091.html