本文实例讲述了mysql存储过程之游标(DECLARE)原理与用法。分享给大家供大家参考,具体如下:

我们在处理存储过程中的结果集时,可以使用游标,因为游标允许我们迭代查询返回的一组行,并相应地处理每行。mysql的游标为只读,不可滚动和敏感三种模式,我们来看下:

  • 只读:无法通过光标更新基础表中的数据。
  • 不可滚动:只能按照select语句确定的顺序获取行。不能以相反的顺序获取行。 此外,不能跳过行或跳转到结果集中的特定行。
  • 敏感:有两种游标:敏感游标和不敏感游标。敏感游标指向实际数据,不敏感游标使用数据的临时副本。敏感游标比一个不敏感的游标执行得更快,因为它不需要临时拷贝数据。但是,对其他连接的数据所做的任何更改都将影响由敏感游标使用的数据,因此,如果不更新敏感游标所使用的数据,则更安全。 MySQL游标是敏感的。

我们可以在存储过程,存储函数和触发器中使用MySQL游标,咱们先来看下使用DECLARE语句声明的语法:

DECLARE cursor_name CURSOR FOR SELECT_statement;
OPEN cursor_name;
FETCH cursor_name INTO variables list;
CLOSE cursor_name;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;

咱们接下来,就要开发一个存储过程用来获取employees表中所有员工的电子邮件列表。我们先来声明一些变量,一个用于循环员工电子邮件的游标和一个NOT FOUND处理程序:

DECLARE finished INTEGER DEFAULT 0;DECLARE email varchar(255) DEFAULT "";-- declare cursor for employee emailDEClARE email_cursor CURSOR FOR SELECT email FROM employees;-- declare NOT FOUND handlerDECLARE CONTINUE HANDLERFOR NOT FOUND SET finished = 1;接下来,使用OPEN语句打开email_cursor:OPEN email_cursor;
get_email: LOOP FETCH email_cursor INTO v_email; IF v_finished = 1 THEN LEAVE get_email; END IF; -- build email list SET email_list = CONCAT(v_email,";",email_list);END LOOP get_email;
CLOSE email_cursor;
DELIMITER $$CREATE PROCEDURE build_email_list (INOUT email_list varchar(4000))BEGIN DECLARE v_finished INTEGER DEFAULT 0;    DECLARE v_email varchar(100) DEFAULT ""; -- declare cursor for employee email DEClARE email_cursor CURSOR FOR SELECT email FROM employees; -- declare NOT FOUND handler DECLARE CONTINUE HANDLER    FOR NOT FOUND SET v_finished = 1; OPEN email_cursor; get_email: LOOP FETCH email_cursor INTO v_email; IF v_finished = 1 THEN LEAVE get_email; END IF; -- build email list SET email_list = CONCAT(v_email,";",email_list); END LOOP get_email; CLOSE email_cursor;END$$DELIMITER ;
SET @email_list = "";CALL build_email_list(@email_list);SELECT @email_list;

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL存储过程技巧大全》、《MySQL常用函数大汇总》、《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》及《MySQL数据库锁相关技巧汇总》

希望本文所述对大家MySQL数据库计有所帮助。

更多相关文章

  1. Android(安卓)中文API(86)——ResourceCursorAdapter
  2. 【有图】android通过jdbc连接mysql(附文件)
  3. android sqlist中游标下标越界问题解决方案
  4. Android(安卓)studio 操作数据库游标适配器
  5. Android:CursorAdapter、ContentResolver、startManagingCursor
  6. Android(安卓)学习笔记之 SQLite基础用法
  7. Android(安卓)- ContactPicker(选择联系人) 详解
  8. Android(安卓)- ContactPicker(选择联系人) 详解
  9. Android(安卓)switch 开关(兼容)

随机推荐

  1. C#异步之APM模式异步程序开发的示例分享
  2. C#中关于Minutes与TotalMinutes的区别
  3. ASP.NET MVC如何使用Bootstrap的实例分析
  4. C#中关于Cookies的读取实例详解
  5. ASP.NET MVC如何正确运用异步编程技术
  6. C#中关于静态与非静态方法的区别介绍
  7. C#如何使用键值对取代Switch...Case语句
  8. C#中关于Dictionary的用法详解
  9. C#中使用反射以及特性简化的实例代码
  10. C#如何使用Socket发送HTTP/HTTPS请求实例