-- oracle统计money存储过程
CREATE OR REPLACE PROCEDURE P_TJ_MONEY (YYYYMM IN VARCHAR2,COUNTS IN NUMBER,OUT_FLAG OUT VARCHAR2) IS
I NUMBER;
V_BEGIN NUMBER;
V_COUNTS NUMBER;
V_DAYS NUMBER;
V_YYYYMM VARCHAR2(60);
V_YYYYMMDD VARCHAR2(60);
V_FLAGS VARCHAR(30);
V_SQL VARCHAR2(3000);
BEGIN
--- 初始化年月
V_YYYYMM := YYYYMM;
IF COUNTS <= 0 THEN
V_COUNTS := 1;
ELSE
V_COUNTS := COUNTS;
END IF;
WHILE V_COUNTS>=1 LOOP
--------------------------------------------------------------------------------------------------------------
--- 计算当月多少天
V_SQL := 'SELECT TO_NUMBER(TO_CHAR(LAST_DAY(TO_DATE('''||V_YYYYMM||''',''YYYYMM'')),''DD'')) TS FROM DUAL';
EXECUTE IMMEDIATE V_SQL INTO V_DAYS;
/*
* 当天外呼超过 10分钟的坐席量
* 插入统计表 TJ_MONEY
*/
V_BEGIN := 1;
/*退出循环*/
<<LABEL_OUT>>
FOR I IN V_BEGIN .. V_DAYS LOOP
IF I <= 9 THEN
V_YYYYMMDD := V_YYYYMM||'0'||I;
ELSE
V_YYYYMMDD := V_YYYYMM||I;
END IF;
--- 计算当天是否存在坐席
V_SQL := 'SELECT COUNT(1) AGENTNUM FROM (
SELECT SUM(DURATION) CALLTIME
FROM CTI_CALLSTAT_'||V_YYYYMM||'
WHERE SUBSTR(ENDTIME,0,8) = '''||V_YYYYMMDD||'''
GROUP BY ORIGCALLING
) WHERE CALLTIME>=''600'' ';
EXECUTE IMMEDIATE V_SQL INTO V_FLAGS;
COMMIT;
--- 统计循环
V_BEGIN := V_BEGIN + 1 ;
--- 跳出 FOR 循环
IF V_FLAGS<=0 THEN
GOTO LABEL_OUT;
END IF;
--- 删除已经统计数据
V_SQL := 'DELETE FROM TJ_MONEY WHERE CTIME='''||V_YYYYMMDD||''' AND FLAG=''0'' ';
EXECUTE IMMEDIATE V_SQL;
COMMIT;
V_SQL := 'INSERT INTO TJ_MONEY SELECT COUNT(1) AGENTNUM,'''||V_YYYYMMDD
||''' CTIME,''0'' FLAG FROM (
SELECT SUM(DURATION) CALLTIME
FROM CTI_CALLSTAT_'||V_YYYYMM||'
WHERE SUBSTR(ENDTIME,0,8) = '''||V_YYYYMMDD||'''
GROUP BY ORIGCALLING
) WHERE CALLTIME>=''600'' ';
EXECUTE IMMEDIATE V_SQL;
COMMIT;
END LOOP;
--------------------------------------------------------------------------------------------------------------
--- 删除已经统计数据
V_SQL := 'DELETE FROM TJ_MONEY WHERE CTIME='''||V_YYYYMM||''' AND FLAG=''1'' ';
EXECUTE IMMEDIATE V_SQL;
COMMIT;
--- 统计当月的平均量
V_SQL :=' INSERT INTO TJ_MONEY
SELECT ROUND(((SELECT ROUND(SUM(AGENTNUM)/A,0) SL_A FROM ( SELECT * FROM TJ_MONEY WHERE FLAG = ''0'' AND CTIME LIKE '''||V_YYYYMM||'__'' ORDER BY AGENTNUM DESC) WHERE ROWNUM <= A) +
(SELECT ROUND(SUM(AGENTNUM)/B,0) SL_B FROM ( SELECT * FROM TJ_MONEY WHERE FLAG = ''0'' AND CTIME LIKE '''||V_YYYYMM||'__'' ORDER BY AGENTNUM DESC) WHERE ROWNUM <= B) +
(SELECT ROUND(SUM(AGENTNUM)/C,0) SL_C FROM ( SELECT * FROM TJ_MONEY WHERE FLAG = ''0'' AND CTIME LIKE '''||V_YYYYMM||'__'' ORDER BY AGENTNUM DESC) WHERE ROWNUM <= C) +
(SELECT ROUND(SUM(AGENTNUM)/D,0) SL_D FROM ( SELECT * FROM TJ_MONEY WHERE FLAG = ''0'' AND CTIME LIKE '''||V_YYYYMM||'__'' ORDER BY AGENTNUM DESC) WHERE ROWNUM <= D) )/4,0) AGENTNUM,
'''||V_YYYYMM||''' CTIME,
''1'' FLAG
FROM (SELECT ROUND(TS * 0.7,0) A, ROUND(TS * 0.75) B, ROUND(TS * 0.8) C, ROUND(TS * 0.85) D
FROM (SELECT COUNT(1) TS FROM TJ_MONEY WHERE FLAG=''0'' AND CTIME LIKE '''||V_YYYYMM||'__'')) ';
EXECUTE IMMEDIATE V_SQL;
COMMIT;
--- 标记循环
V_COUNTS := V_COUNTS - 1;
IF V_COUNTS>=1 THEN
--- 获取下一个月
V_SQL := 'SELECT TO_CHAR(ADD_MONTHS(TO_DATE('''||V_YYYYMM||''',''YYYYMM''),1),''YYYYMM'') YM FROM DUAL';
EXECUTE IMMEDIATE V_SQL INTO V_YYYYMM;
END IF;
END LOOP;
OUT_FLAG := '成功..!';
--- 异常
EXCEPTION
when others then
rollback; -- 回滚
DBMS_OUTPUT.PUT_LINE(SQLERRM);
OUT_FLAG := '失败..!';
return;
END P_TJ_MONEY;
---------------------------------------------------------------------------------------------------------------------------------
-- Create table
create table TJ_MONEY
(
AGENTNUM NUMBER,
CTIME VARCHAR2(30),
FLAG VARCHAR2(2)
)
分享到:
相关推荐
本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...
帮助解决Oracle中存储过程自动备份得脚本及添加任务计划过程得详细解说 帮助解决Oracle中存储过程自动备份得脚本及添加任务计划过程得详细解说
oracle 存储过程实例 oracle存储过程实例
Oracle定时执行存储过程 Oracle定时执行存储过程
oracle 事务 回滚 存储过程 自用
ORACLE的存储过程的异步调用 ORACLE的存储过程的异步调用 ORACLE的存储过程的异步调用
Oracle_的存储过程及游标Oracle_的存储过程及游标Oracle_的存储过程及游标Oracle_的存储过程及游标Oracle_的存储过程及游标Oracle_的存储过程及游标Oracle_的存储过程及游标Oracle_的存储过程及游标
本文讲述如何在Oracle通过任务和管道的应用,异步调用存储过程的方法。并且介绍了其基本原理和具体实现测试。
oracle 批量插入存储过程,性能非常高!
oracle定时器调用存储过程
jdbc连接oracle,执行存储过程,带数据库存储过程,代码是详细的源码,读取配置文件,连接jdbc,执行存储过程。
oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel
C#中调用Oracle存储过程
oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记
oracle 批量插入数据存储过程。亲测好用。支持 plsql ,toad,等数据库分析软件。主要包括变量的定义,循环及游标的使用等, 亲测好用
Oracle触发器与存储过程高级编程Oracle触发器与存储过程高级编程
oracle 存储过程示例oracle 存储过程示例oracle 存储过程示例oracle 存储过程示例oracle 存储过程示例oracle 存储过程示例oracle 存储过程示例oracle 存储过程示例
oracle 触发器 调用 存储过程 Oracle自治事务(Autonomous Transaction)
帆软报表调用Oracle存储过程如果存储过程定义中没有参数,但是设计器中缺弹出一个storeParameter1参数的解决插件