先贴代码出来,解释之后再写:
create or replace procedure AGENTOPER( ------------------------------------------------------ ---个人工作量统计报表 ------------------------------------------------------ v_date in varchar2 --输入日期:yyyymmdd ) as V_OPER VARCHAR2(40) :=''; --工号 V_INTIMES NUMBER(8) :=0; --接通次数 V_OUTTIMES NUMBER(8) :=0; --呼出次数 V_INTIME NUMBER(12) :=0; --平均通话时长 V_OUTTIME NUMBER(12) :=0; --平均时长 V_TOTALTIME NUMBER(16) :=0; --工作总时长 V_FEELCOUNT NUMBER(8) :=0; --满意度参与量 V_FEELGOODCOUNT VARCHAR2(12) :=''; --满意度 v_sql varchar2(1000):=''; v_curmonth number(2); --当前月份 TYPE REF_CURSOR IS REF CURSOR; c_workcount REF_CURSOR; begin delete from DB_AGENTOPER_STAT where substr(opertime,0,8) = v_date; commit; ------------------------------------------------------------------------ --总数 ------------------------------------------------------------------------ open c_workcount for 'select distinct oper from db_agent_operator g where 1=1 and substr(sid,1,8)='||v_date; loop <<c_workcount_mark>> V_OPER :=''; --工号 V_INTIMES :=0; V_INTIME :=0; V_OUTTIMES :=0; V_OUTTIME :=0; V_TOTALTIME :=0; V_FEELCOUNT :=0; V_FEELGOODCOUNT :=''; fetch c_workcount into V_OPER; ------------------------------------------- -----接通次数 ------------------------------------------- v_sql := 'select count(*) from (select * from db_agent_operator where opertype = 18) e,(select * from db_agent_operator where opertype = 19) n where e.oper='''||V_OPER||''' and e.phone_no=n.phone_no'; execute immediate v_sql into V_INTIMES; ------------------------------------------- -----平均通话时长 ------------------------------------------- v_sql := 'select round((select sum(n.reserve4-e.reserve4) from (select * from db_agent_operator where opertype = 18) e,(select * from db_agent_operator where opertype = 19) n where e.oper='''||V_OPER||''' and e.phone_no=n.phone_no) / (select case when c=0 then 1 else c end from (select count(*) c from (select * from db_agent_operator where opertype = 18) e,(select * from db_agent_operator where opertype = 19) n where e.oper='''||V_OPER||''' and e.phone_no=n.phone_no)),2) from dual'; execute immediate v_sql into V_INTIME; ------------------------------------------- -----呼出次数 ------------------------------------------- v_sql := 'select count(*) from (select * from db_agent_operator where opertype = 8) e,(select * from db_agent_operator where opertype = 19) n where e.oper='''||V_OPER||''' and e.phone_no=n.phone_no'; execute immediate v_sql into V_OUTTIMES; ------------------------------------------- -----平均呼出时长 ------------------------------------------- v_sql := 'select round((select sum(n.reserve4-e.reserve4) from (select * from db_agent_operator where opertype = 8) e,(select * from db_agent_operator where opertype = 19) n where e.oper='''||V_OPER||''' and e.phone_no=n.phone_no) / (select case when c=0 then 1 else c end from (select count(*) c from (select * from db_agent_operator where opertype = 8) e,(select * from db_agent_operator where opertype = 19) n where e.oper='''||V_OPER||''' and e.phone_no=n.phone_no)),2) from dual'; execute immediate v_sql into V_OUTTIME; ------------------------------------------- -----工作总时长 ------------------------------------------- v_sql := 'select sum(n.reserve4-e.reserve4) from (select * from db_agent_operator where opertype = 2) e,(select * from db_agent_operator where opertype = 3) n where e.oper='''||V_OPER||''' and e.phone_no=n.phone_no'; execute immediate v_sql into V_TOTALTIME; ------------------------------------------- -----满意度参与量 ------------------------------------------- v_sql := 'select count(*) from db_agent_operator where oper='''||V_OPER||''' and opertype = 14'; execute immediate v_sql into V_FEELCOUNT; ------------------------------------------- ----- 满意度 ------------------------------------------- v_sql := 'select to_char(round((select count(*) from db_qos q,db_agent_operator a where oper='''||V_OPER||''' and q.sid=a.sid and q.score=''1'' and a.opertype = 14) / (select case when c=0 then 1 else c end from (select count(*) from db_agent_operator where oper='''||V_OPER||''' and opertype = 14)),2)*100)||''%'' from dual'; execute immediate v_sql into V_FEELGOODCOUNT; begin ------------------------------------------------------------------------ --插表 ------------------------------------------------------------------------ insert into DB_AGENTOPER_STAT(OPERTIME,OPER,INTIMES,INTIME,OUTTIMES,OUTTIME,TOTALTIME,FEELCOUNT,FEELGOODCOUNT) values(v_date,V_OPER,V_INTIMES,V_INTIME,V_OUTTIMES,V_OUTTIME,V_TOTALTIME,V_FEELCOUNT,V_FEELGOODCOUNT); end; exit when c_workcount%notfound; end loop; close c_workcount; commit; exception when others then dbms_output.put_line(sqlcode||':'||sqlerrm); rollback; return; end;
相关推荐
PLSQL 存储过程 语法
通过以上实例,我们了解了在PL/SQL存储过程中使用游标的多种方式,包括简单的单值输出、遍历游标、带参数的游标以及使用多个游标进行复杂的数据处理。掌握这些技术将有助于开发出更加高效和健壮的应用程序。
如题,初步研究了pl/sql的写法,现给出存储过程,游标等的使用,后续会给出其他的用法
游标是PL/SQL中用于存储SELECT语句结果集的一种机制。它允许用户逐行访问结果集中的数据。游标有两种主要类型: 1. **显式游标**:需要手动打开、读取和关闭。 2. **隐式游标**:在使用`SELECT ... INTO`语句时自动...
通过这些示例文件,学习者可以深入理解PL/SQL中的核心概念,如变量、数据类型、流程控制、记录操作以及游标使用。每个文件都代表了一个具体的PL/SQL编程技巧或实践,对于提升数据库编程技能非常有帮助。实际操作这些...
Oracle PlSql 存储过程详解 Oracle PlSql 存储过程是 Oracle 数据库中的一种编程语言,用于实现复杂的业务逻辑和数据处理。下面是对 Oracle PlSql 存储过程的详细介绍: 一、 Oracle 存储过程目录 Oracle 存储...
本实例将深入探讨如何构建一个完整的图书管理系统,涉及的关键知识点包括数据库的概念和逻辑结构设计,以及游标和存储过程的使用。 一、数据库概念与逻辑结构设计 1. 数据库概念:数据库是一个组织和存储数据的系统...
语法入门、操作plsql、存储过程、函数、触发器、游标、包、返回类型;一个execle表轻松搞定。
根据提供的文件信息,我们可以深入探讨以下...以上就是基于给定文件信息对 PL/SQL 存储过程的基本介绍,包括语言特点、程序结构、数据类型与定义以及简单的示例代码。希望这些内容能够帮助初学者快速入门 PL/SQL 编程。
PL/SQL存储过程及Java程序的编写 ##### 2.1 索引表作为输出参数 索引表是一种非常灵活且强大的数据结构,它可以存储大量的数据,并且提供了直接对单个元素进行操作的能力。在Oracle中,索引表的大小受到关键字...
本资料主要关注PLSQL编程以及在Oracle中创建和使用存储过程。 PL/SQL是Oracle特有的编程语言,它扩展了SQL的功能,允许开发者编写复杂的业务逻辑和控制流程。在PL/SQL中,你可以声明变量、定义过程和函数、处理异常...
在这个“整理:Oracle PL/SQL 入门+数组使用+游标+动态SQL”文档中,我们将深入探讨这四个关键概念。 1. Oracle PL/SQL入门: - PL/SQL的基本结构:PL/SQL由声明部分、执行部分和异常处理部分组成,用于定义变量、...
### Oracle PL/SQL 存储过程详解 ...通过以上内容,我们深入了解了Oracle存储过程的基础知识、基本语法及一些实际应用场景。这有助于开发者更好地理解和运用这一强大功能,从而提升应用程序的性能和可维护性。
使用`fetch`语句从游标中获取数据并存储到接收变量中: ```sql fetch c_stu into v_rj; ``` 如果没有更多的数据,`c_stu%notfound`会返回`TRUE`,此时可以退出循环。 5. **循环处理数据(Loop Through Data)*...
例如,下面的存储过程`FIRE_EMPLOYEE`使用游标属性处理DML语句的结果: ```sql CREATE OR REPLACE PROCEDURE FIRE_EMPLOYEE (pempno in number) AS v_ename EMP.ENAME%TYPE; BEGIN SELECT ename INTO v_ename ...
这个压缩包“PLSQL操作存储过程、函数、游标、触发器、定时任务等实例SQL脚本.zip”包含了关于如何使用PL/SQL来处理数据库的各种关键概念的实例脚本。下面,我们将详细探讨这些知识点。 1. **存储过程**:存储过程...
3. 处理:使用FETCH语句从游标中提取一行数据,并将其存储在变量中: ```sql FETCH cEmp INTO emp_id, emp_name, salary; ``` 4. 检查:使用%FOUND和%NOTFOUND属性检查是否已读取到数据,%ROWCOUNT属性可以获取已...
3. **返回列表**:如果存储过程返回一个集合,可以使用`Cursor`类型的`OUT`参数,Java端需要处理游标并遍历结果。 **在存储过程中做简单动态查询** - **本地动态SQL**:通过`EXECUTE IMMEDIATE`语句执行动态构建的...
PLSQL,全称为Procedural Language/Structured Query Language,是Oracle数据库系统中用于编写存储过程、函数、包等数据库程序的编程语言。本压缩包集合了关于PLSQL的各种关键知识点,包括语法、异常处理、指针和...