热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MySQL存储过程范例

mysql存储过程实例viewplaincopyDELIMITER $DROP PROCEDURE IF EXISTS `stat` $CREATE DEFINER`liulive

mysql 存储过程实例

[sql] view plaincopy

  1. DELIMITER $  
  2.   
  3. DROP PROCEDURE IF EXISTS `stat` $  
  4. CREATE DEFINER=`liulive`@`%` PROCEDURE `stat`(startDate VARCHAR(14), endDate VARCHAR(14))  
  5. BEGIN  
[sql] view plaincopy

  1. /*声明变量*/  
[sql] view plaincopy

  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;  
[sql] view plaincopy

  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 ;  


推荐阅读
  • Python操作MySQL(pymysql模块)详解及示例代码
    本文介绍了使用Python操作MySQL数据库的方法,详细讲解了pymysql模块的安装和连接MySQL数据库的步骤,并提供了示例代码。内容涵盖了创建表、插入数据、查询数据等操作,帮助读者快速掌握Python操作MySQL的技巧。 ... [详细]
  • 一基础代码检查    检查以bm_开头的系统初始化编码表是否有空值。与业务系统相关的编码项不能存在空值,会导致系统业务无法办理。为初始化数据表、在做测试数据和正式上线前检查。上线 ... [详细]
  • PHP操作MySql数据库_PHP教程:链接数据库$conn@mysql_connect(localhost,root,88888888)ordie(链接错误);解决中文乱码mys ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • MySQL插入数据的四种方式及安全性分析
    本文介绍了MySQL插入数据的四种方式:插入完整的行、插入行的一部分、插入多行和插入查询结果,并对其安全性进行了分析。在插入行时,应注意字段的定义和赋值,以提高安全性。同时指出了使用insert语句的不安全性,应尽量避免使用。建议在表中定义相关字段,并根据定义的字段赋予相应的值,以增加插入操作的安全性。 ... [详细]
  • scrapy 采集入为库 mysql 数据库,只更新一个字段 提示这个语法错误?
    就是查询有没有这个字,如果查到这个字就更新这个字的bsmc字段表是news_topic插入代码如下: ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
author-avatar
张骞在这里
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有