`
acf
  • 浏览: 35153 次
文章分类
社区版块
存档分类
最新评论

MySQL 存储过程实例

 
阅读更多

  1. DELIMITER $  
  2.   
  3. DROP PROCEDURE IF EXISTS `stat` $  
  4. CREATE DEFINER=`liulive`@`%` PROCEDURE `stat`(startDate VARCHAR(14), endDate VARCHAR(14))  
  5. BEGIN  
  1. /*声明变量*/  
  1. DECLARE total INT DEFAULT 0;  
  2. DECLARE dat DATE DEFAULT NULL;  
  3. DECLARE quals INT DEFAULT 0;  
  4. DECLARE scheds INT DEFAULT 0;  
  5. DECLARE shows INT DEFAULT 0;  
  6. DECLARE kepts INT DEFAULT 0;  
  7. DECLARE accepts INT DEFAULT 0;  
  8. DECLARE _time VARCHAR(14) DEFAULT NULL;  
  9. DECLARE assess VARCHAR(40) DEFAULT NULL;  
  10.   
  11. DECLARE offic VARCHAR(60) DEFAULT NULL;  
  12. DECLARE recrui VARCHAR(60) DEFAULT NULL;  
  13. DECLARE ma VARCHAR(60) DEFAULT NULL;  
  14.   
  15. DECLARE CNT INT DEFAULT 0;  
  16.   
  17. DECLARE _cursor_flag TINYINT(1) DEFAULT 0;  
  18. /*定义光标*/  
  19. DECLARE totalCalls CURSOR FOR Select count(flow_step) as total, DATE(operate_date) as dat, office, recruit, main from v_student where DATE(operate_date) >= DATE(startDate) And DATE(operate_date) <= DATE(endDate) group by DATE(operate_date), office, recruit, main order by DATE(operate_date);  
  20. DECLARE qualCalls CURSOR FOR Select count(flow_step) as qual, DATE(operate_date) as dat, office, recruit, main  from v_student where flow_step <> 'NQ' And DATE(operate_date) >= DATE(startDate) and DATE(operate_date) <= DATE(endDate) group by DATE(operate_date), office, recruit, main order by DATE(operate_date);  
  21. DECLARE schedCalls CURSOR FOR Select count(flow_step) as sched, DATE(operate_date) as dat, office, recruit, main  from v_student where flow_step = 'Assessment Scheduled' And DATE(operate_date) >= DATE(startDate) and DATE(operate_date) <= DATE(endDate) group by DATE(operate_date), office, recruit, main order by DATE(operate_date);  
  22.   
  23. DECLARE totalSched CURSOR FOR Select count(flow_step) as sched, officeTime, DATE(vco_date) as dat, assessor, office, recruit, main  from v_student where flow_step = 'Assessment Scheduled' And DATE(vco_date) >= DATE(startDate) And DATE(vco_date) <= DATE(endDate) group by officeTime, DATE(vco_date), assessor, office, main order by DATE(vco_date);  
  24. DECLARE showSched CURSOR FOR Select count(shows) as shows, officeTime, DATE(vco_date) as dat, assessor, office, recruit, main  from v_student where shows is not null And flow_step = 'Assessment Scheduled' And DATE(vco_date) >= DATE(startDate) And DATE(vco_date) <= DATE(endDate) group by officeTime, DATE(vco_date), assessor, office, main order by DATE(vco_date);  
  25. DECLARE qualSched CURSOR FOR Select count(qual) as quals, officeTime, DATE(vco_date) as dat, assessor, office, recruit, main  from v_student where qual is not null And flow_step = 'Assessment Scheduled' And DATE(vco_date) >= DATE(startDate) And DATE(vco_date) <= DATE(endDate) group by officeTime, DATE(vco_date), assessor, office, main order by DATE(vco_date);  
  26. DECLARE keptSched CURSOR FOR Select count(kept) as kepts, officeTime, DATE(vco_date) as dat, assessor, office, recruit, main  from v_student where kept is not null And flow_step = 'Assessment Scheduled' And DATE(vco_date) >= DATE(startDate) And DATE(vco_date) <= DATE(endDate) group by officeTime, DATE(vco_date), assessor, office, main order by DATE(vco_date);  
  27. DECLARE acceptSched CURSOR FOR Select count(accept) as accepts, officeTime, DATE(vco_date) as dat, assessor, office, recruit, main  from v_student where accept is not null And flow_step = 'Assessment Scheduled' And DATE(vco_date) >= DATE(startDate) And DATE(vco_date) <= DATE(endDate) group by officeTime, DATE(vco_date), assessor, office, main order by DATE(vco_date);  
  28. nbsp;  
  1.   /* 定义光标结束标志 */  
  2.   DECLARE CONTINUE HANDLER FOR NOT FOUND SET _cursor_flag = -1;  
  3.   
  4.   DELETE FROM STAT_TEMP;  
  5.   COMMIT;  
  6.     
  7.   OPEN totalCalls;  /*打开光标*/  
  8.   LOOP_totalCalls:LOOP   /* 循环声明 */  
  9.     FETCH totalCalls INTO total, dat, offic, recrui, ma;  
  10.     IF _cursor_flag = -1 then  
  11.       LEAVE LOOP_totalCalls;  
  12.     END IF;  
  13.     insert into STAT_TEMP(DATE_, TOTAL_CALLS, OFFICE, RECRUIT, MAIN) values(dat, total, offic, recrui, ma);  
  14.   END LOOP;  
  15.   COMMIT;  
  16.   CLOSE totalCalls;   /* 关闭光标 */  
  17.   SET _cursor_flag = 1;   /* 重置光标结束标志 */  
  18.   
  19.   OPEN qualCalls;  
  20.   LOOP_qualCalls:LOOP  
  21.     FETCH qualCalls INTO quals, dat, offic, recrui, ma;  
  22.     if _cursor_flag = -1 then  
  23.       LEAVE LOOP_qualCalls;  
  24.     end if;  
  25.     SELECT COUNT(*) INTO CNT FROM STAT_TEMP WHERE DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma;  
  26.     IF CNT > 0 THEN  
  27.       UPDATE STAT_TEMP SET QUAL_CALLS=quals WHERE DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma;  
  28.       SET CNT = 0;  
  29.     ELSE  
  30.       insert into STAT_TEMP (DATE_, QUAL_CALLS, OFFICE, RECRUIT, MAIN) values(dat, quals, offic, recrui, ma);  
  31.     END IF;  
  32.   END LOOP;  
  33.   COMMIT;  
  34.   CLOSE qualCalls;  
  35.   SET _cursor_flag = 1;  
  36.   
  37.   OPEN schedCalls;  
  38.   LOOP_schedCalls:LOOP  
  39.     FETCH schedCalls INTO scheds,dat,offic,recrui,ma;  
  40.     if _cursor_flag = -1 then  
  41.       LEAVE LOOP_schedCalls;  
  42.     end if;  
  43.     SELECT COUNT(*) INTO CNT FROM STAT_TEMP WHERE DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma;  
  44.     IF CNT > 0 THEN  
  45.       UPDATE STAT_TEMP SET SCHED_CALLS=scheds WHERE DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma;  
  46.       SET CNT = 0;  
  47.     ELSE  
  48.       insert into STAT_TEMP(DATE_, SCHED_CALLS, OFFICE, RECRUIT, MAIN) values(dat, scheds, offic, recrui, ma);  
  49.     END IF;  
  50.   END LOOP;  
  51.   COMMIT;  
  52.   CLOSE schedCalls;  
  53.   SET _cursor_flag = 1;  
  54.   
  55.   OPEN totalSched;  
  56.   LOOP_totalSched:LOOP  
  57.     FETCH totalSched INTO scheds, _time, dat, assess, offic, recrui, ma;  
  58.     if _cursor_flag = -1 then  
  59.       LEAVE LOOP_totalSched;  
  60.     end if;  
  61.     select count(*) into CNT from STAT_TEMP where DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma And ASSESSOR=assess;  
  62.     if CNT > 0 then  
  63.       update STAT_TEMP set SCHED=scheds WHERE DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma And ASSESSOR=assess;  
  64.       SET CNT = 0;  
  65.     else  
  66.       insert into STAT_TEMP(DATE_, SCHED, ASSESSOR, OFFICE, RECRUIT, MAIN) values(dat, scheds, assess, offic, recrui, ma);  
  67.     end if;  
  68.   END LOOP;  
  69.   COMMIT;  
  70.   CLOSE totalSched;  
  71.   SET _cursor_flag = 1;  
  72.   
  73.   OPEN showSched;  
  74.   LOOP_showSched:LOOP  
  75.     FETCH showSched INTO shows, _time, dat, assess,offic,recrui,ma;  
  76.     if _cursor_flag = -1 then  
  77.       LEAVE LOOP_showSched;  
  78.     end if;  
  79.     select count(*) into CNT from STAT_TEMP where DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma And ASSESSOR=assess;  
  80.     if CNT > 0 then  
  81.       update STAT_TEMP set SHOWS=shows WHERE DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma And ASSESSOR=assess;  
  82.       SET CNT = 0;  
  83.     else  
  84.       insert into STAT_TEMP(DATE_, SHOWS, ASSESSOR, OFFICE, RECRUIT, MAIN) values(dat, scheds, assess, offic, recrui, ma);  
  85.     end if;  
  86.   END LOOP;  
  87.   COMMIT;  
  88.   CLOSE showSched;  
  89.   SET _cursor_flag = 1;  
  90.   
  91.   OPEN qualSched;  
  92.   LOOP_qualSched:LOOP  
  93.     FETCH qualSched INTO quals, _time, dat, assess,offic,recrui,ma;  
  94.     if _cursor_flag = -1 then  
  95.       LEAVE LOOP_qualSched;  
  96.     end if;  
  97.     select count(*) into CNT from STAT_TEMP where DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma And ASSESSOR=assess;  
  98.     if CNT > 0 then  
  99.       update STAT_TEMP set QUAL=quals WHERE DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma And ASSESSOR=assess;  
  100.       SET CNT = 0;  
  101.     else  
  102.       insert into STAT_TEMP(DATE_, QUAL, ASSESSOR, OFFICE, RECRUIT, MAIN) values(dat, quals, assess, offic, recrui, ma);  
  103.     end if;  
  104.   END LOOP;  
  105.   COMMIT;  
  106.   CLOSE qualSched;  
  107.   SET _cursor_flag = 1;  
  108.   
  109.   OPEN keptSched;  
  110.   LOOP_keptSched:LOOP  
  111.     FETCH keptSched INTO kepts, _time, dat, assess, offic, recrui, ma;  
  112.     if _cursor_flag = -1 then  
  113.       LEAVE LOOP_keptSched;  
  114.     end if;  
  115.     select count(*) into CNT from STAT_TEMP where DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma And ASSESSOR=assess;  
  116.     if CNT > 0 then  
  117.       update STAT_TEMP set KEPT=kepts WHERE DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma And ASSESSOR=assess;  
  118.       SET CNT = 0;  
  119.     else  
  120.       insert into STAT_TEMP(DATE_, KEPT, ASSESSOR, OFFICE, RECRUIT, MAIN) values(dat, kepts, assess, offic, recrui, ma);  
  121.     end if;  
  122.   END LOOP;  
  123.   COMMIT;  
  124.   CLOSE keptSched;  
  125.   SET _cursor_flag = 1;  
  126.   
  127.   OPEN acceptSched;  
  128.   LOOP_acceptSched:LOOP  
  129.     FETCH acceptSched INTO kepts, _time, dat, assess, offic, recrui, ma;  
  130.     if _cursor_flag = -1 then  
  131.       LEAVE LOOP_acceptSched;  
  132.     end if;  
  133.     select count(*) into CNT from STAT_TEMP where DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma And ASSESSOR=assess;  
  134.     if CNT > 0 then  
  135.       update STAT_TEMP set KEPT=kepts WHERE DATE_ = dat And OFFICE = offic And RECRUIT = recrui And MAIN = ma And ASSESSOR=assess;  
  136.       SET CNT = 0;  
  137.     else  
  138.       insert into STAT_TEMP(DATE_, KEPT, ASSESSOR, OFFICE, RECRUIT, MAIN) values(dat, kepts, assess, offic, recrui, ma);  
  139.     end if;  
  140.   END LOOP;  
  141.   COMMIT;  
  142.   CLOSE acceptSched;  
  143. END $  
  144.   
  145. DELIMITER ;  
分享到:
评论

相关推荐

    mysql存储过程实例

    MySQL 存储过程实例 MySQL 存储过程实例详细介绍了 MySQL 存储过程的开发步骤,本节将通过具体的实例讲解 PHP 是如何操纵 MySQL 存储过程的。 创建存储过程 存储过程的创建是 MySQL 存储过程的基础,MySQL 5.0 ...

    MySQL存储过程实例教程

    ### MySQL存储过程实例教程 #### 存储过程概念与优势 存储过程,作为数据库中一种预编译的SQL语句集合,旨在实现特定功能并存储于数据库内,用户仅需指定其名称及必要参数即可调用执行。这种设计极大地简化了...

    MYSQL存储过程实例

    MYSQL 存储过程 实例,要的自己下,分有点贵哦。

    MySQL存储过程实例教程.doc

    MySQL存储过程实例教程 MySQL存储过程是数据库存储的一个重要的功能,它允许控制数据的访问方式,提供了灵活的编程方式,提高了数据库的处理速度和灵活性。本教程将详细介绍 MySQL 存储过程的概念、优点、创建和...

    mysql存储过程实例详解,pdf

    mysql存储过程实例详解

    PHP和MySQL存储过程实例

    根据给定的信息,我们可以深入探讨PHP与MySQL存储过程的相关知识点,包括如何在MySQL中使用`CONCAT`函数、创建存储过程以及如何通过PHP脚本来调用这些存储过程。 ### 使用 CONCAT 函数 #### 标题中的示例 ```sql ...

    SQL存储过程实例.doc

    在这个实例中,我们看到一个名为`Sum_wage`的存储过程,它的主要目的是对`ProWage`表中的工资进行加薪操作。 首先,存储过程的创建使用了`CREATE PROCEDURE`语句,定义了一个名为`Sum_wage`的过程,并接受三个参数...

    MySQL存储过程实例教程详解.docx

    MySQL存储过程是数据库管理系统提供的一种高级程序设计语言,允许用户在数据库中封装一系列复杂的操作,以便重复使用。在MySQL 5.0及后续版本中,存储过程被引入,极大地提升了数据库管理和应用程序的效率。本教程将...

    MYSQL的存储过程实例文档

    ### MySQL存储过程详解 #### 一、存储过程概述 存储过程是一种特殊类型的SQL代码集合,它们预先被编译并存储在数据库服务器上。用户可以通过指定存储过程名称并提供必要的参数来执行这些存储过程。这种机制提供了...

    php调用mysql存储过程实例分析

    ### PHP调用MySQL存储过程实例 在PHP中调用MySQL存储过程,通常使用`mysqli`扩展。在创建了存储过程后,我们可以通过PHP脚本来调用这些存储过程。以下是一个获取MySQL当前版本号的存储过程调用实例: ```sql ...

    mysql复杂存储过程实例(游标、临时表、循环、递归)

    本资源结合实例实现一个复杂的存储过程,存储过程中有用到游标、临时表、循环、递归等知识,sql文件附有实例数据表创建的sql语句。

    MySQL存储过程的异常处理方法

    本实例展示了如何在MySQL存储过程中实现异常处理,以捕获并处理可能出现的错误。 首先,我们注意到在创建存储过程`myProc`时,使用了`delimiter $$`来改变MySQL客户端的语句分隔符,这是为了在存储过程中使用多个...

    mysql存储过程之错误处理实例详解

    本文实例讲述了mysql存储过程之错误处理。分享给大家供大家参考,具体如下: 当存储过程中发生错误时,重要的是适当处理它,例如:继续或退出当前代码块的执行,并发出有意义的错误消息。其中mysql提供了一种简单的...

Global site tag (gtag.js) - Google Analytics