`

PLSQL存储过程及游标的使用

阅读更多

先贴代码出来,解释之后再写:

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 存储过程 游标使用

    PLSQL 存储过程 语法

    Oralce PLSQL存储过程之游标实践!

    通过以上实例,我们了解了在PL/SQL存储过程中使用游标的多种方式,包括简单的单值输出、遍历游标、带参数的游标以及使用多个游标进行复杂的数据处理。掌握这些技术将有助于开发出更加高效和健壮的应用程序。

    pl/sql语句(包含存储过程和游标)一

    如题,初步研究了pl/sql的写法,现给出存储过程,游标等的使用,后续会给出其他的用法

    plsql基础(游标)

    游标是PL/SQL中用于存储SELECT语句结果集的一种机制。它允许用户逐行访问结果集中的数据。游标有两种主要类型: 1. **显式游标**:需要手动打开、读取和关闭。 2. **隐式游标**:在使用`SELECT ... INTO`语句时自动...

    plsql存储过程源代码

    通过这些示例文件,学习者可以深入理解PL/SQL中的核心概念,如变量、数据类型、流程控制、记录操作以及游标使用。每个文件都代表了一个具体的PL/SQL编程技巧或实践,对于提升数据库编程技能非常有帮助。实际操作这些...

    Oracle PlSql 存储过程

    Oracle PlSql 存储过程详解 Oracle PlSql 存储过程是 Oracle 数据库中的一种编程语言,用于实现复杂的业务逻辑和数据处理。下面是对 Oracle PlSql 存储过程的详细介绍: 一、 Oracle 存储过程目录 Oracle 存储...

    数据库实例详解——图书管理系统(包括SQL代码,游标,存储过程)

    本实例将深入探讨如何构建一个完整的图书管理系统,涉及的关键知识点包括数据库的概念和逻辑结构设计,以及游标和存储过程的使用。 一、数据库概念与逻辑结构设计 1. 数据库概念:数据库是一个组织和存储数据的系统...

    plsql教程大全(语法入门、操作plsql、存储过程、函数、触发器、游标、包、返回类型)

    语法入门、操作plsql、存储过程、函数、触发器、游标、包、返回类型;一个execle表轻松搞定。

    PLSQL入门存储过程(详细注释案例).pdf

    根据提供的文件信息,我们可以深入探讨以下...以上就是基于给定文件信息对 PL/SQL 存储过程的基本介绍,包括语言特点、程序结构、数据类型与定义以及简单的示例代码。希望这些内容能够帮助初学者快速入门 PL/SQL 编程。

    Oracle集合类型输出参数的PLSQL存储过程及其Java调用.docx

    PL/SQL存储过程及Java程序的编写 ##### 2.1 索引表作为输出参数 索引表是一种非常灵活且强大的数据结构,它可以存储大量的数据,并且提供了直接对单个元素进行操作的能力。在Oracle中,索引表的大小受到关键字...

    基于oracle数据库的PLSQL编程以及存储过程的创建和使用资料.zip

    本资料主要关注PLSQL编程以及在Oracle中创建和使用存储过程。 PL/SQL是Oracle特有的编程语言,它扩展了SQL的功能,允许开发者编写复杂的业务逻辑和控制流程。在PL/SQL中,你可以声明变量、定义过程和函数、处理异常...

    整理:oracle pl/sql 入门+ 数组使用+游标+动态SQL

    在这个“整理:Oracle PL/SQL 入门+数组使用+游标+动态SQL”文档中,我们将深入探讨这四个关键概念。 1. Oracle PL/SQL入门: - PL/SQL的基本结构:PL/SQL由声明部分、执行部分和异常处理部分组成,用于定义变量、...

    Oracle_PLSQL_存储过程

    ### Oracle PL/SQL 存储过程详解 ...通过以上内容,我们深入了解了Oracle存储过程的基础知识、基本语法及一些实际应用场景。这有助于开发者更好地理解和运用这一强大功能,从而提升应用程序的性能和可维护性。

    PLSQL编程(游标).docx

    使用`fetch`语句从游标中获取数据并存储到接收变量中: ```sql fetch c_stu into v_rj; ``` 如果没有更多的数据,`c_stu%notfound`会返回`TRUE`,此时可以退出循环。 5. **循环处理数据(Loop Through Data)*...

    Oracle PLSQL语言初级教程之游标

    例如,下面的存储过程`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

    这个压缩包“PLSQL操作存储过程、函数、游标、触发器、定时任务等实例SQL脚本.zip”包含了关于如何使用PL/SQL来处理数据库的各种关键概念的实例脚本。下面,我们将详细探讨这些知识点。 1. **存储过程**:存储过程...

    PLSQL游标编程培训内含实例

    3. 处理:使用FETCH语句从游标中提取一行数据,并将其存储在变量中: ```sql FETCH cEmp INTO emp_id, emp_name, salary; ``` 4. 检查:使用%FOUND和%NOTFOUND属性检查是否已读取到数据,%ROWCOUNT属性可以获取已...

    Oracle PlSql存储过程

    3. **返回列表**:如果存储过程返回一个集合,可以使用`Cursor`类型的`OUT`参数,Java端需要处理游标并遍历结果。 **在存储过程中做简单动态查询** - **本地动态SQL**:通过`EXECUTE IMMEDIATE`语句执行动态构建的...

    PLSQL 文档集合包(语法 异常 指针 游标 存储过程...)

    PLSQL,全称为Procedural Language/Structured Query Language,是Oracle数据库系统中用于编写存储过程、函数、包等数据库程序的编程语言。本压缩包集合了关于PLSQL的各种关键知识点,包括语法、异常处理、指针和...

Global site tag (gtag.js) - Google Analytics