`
- 浏览:
622930 次
- 性别:
- 来自:
上海
-
多游标及游标嵌套使用
DELIMITER $$
CREATE PROCEDURE test_cursor()
BEGIN
/*定义变量*/
DECLARE userId Long;
DECLARE userName VARCHAR(255);
DECLARE userAge INT;
-- 定义循环标识,默认值为 FALSE
DECLARE done INT DEFAULT FALSE;
-- 定义游标
DECLARE My_Cursor CURSOR FOR (SELECT id,`name`,age FROM user);
DECLARE My_Cursor2 CURSOR FOR (SELECT id,`name`,age FROM user WHERE id in(3,4));
DECLARE My_Cursor3 CURSOR FOR (SELECT id,`name`,age FROM user WHERE id=userId);
-- 将结束标志绑定到游标,若没有数据返回,程序继续,并将变量done设为TRUE
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 打开游标
OPEN My_Cursor;
myLoop : LOOP
-- 循环游标中的数据,并赋值到变量中
FETCH My_Cursor INTO userId,userName,userAge;
IF done THEN
LEAVE myLoop;
ELSE
IF userName='lisi' THEN
UPDATE user SET `name`='lisi1' WHERE id=userId;
END IF;
END IF;
COMMIT;
END LOOP myLoop;
CLOSE My_Cursor;
-- 开始第二个游标时先将 done 置为 FALSE
SET done = FALSE;
-- 打开游标
OPEN My_Cursor2;
myLoop2 : LOOP
-- 循环游标中的数据,并赋值到变量中
FETCH My_Cursor2 INTO userId,userName,userAge;
IF done THEN
LEAVE myLoop2;
ELSE
OPEN My_Cursor3;
myLoop3 : LOOP
FETCH My_Cursor3 INTO userId,userName,userAge;
IF done THEN
LEAVE myLoop3;
ELSE
UPDATE user SET `name`=CONCAT(userName,'1','2') WHERE id=userId;
END IF;
COMMIT;
END LOOP myLoop3;
CLOSE My_Cursor3;
-- 嵌套使用是内部游标结束后给done置 FALSE
SET done=FALSE;
END IF;
END LOOP myLoop2;
CLOSE My_Cursor2;
END
$$
参考URL:
https://blog.csdn.net/obc_132/article/details/79397128
https://blog.csdn.net/xiaosheng_papa/article/details/80635727
https://www.cnblogs.com/LJ-fish/archive/2010/10/14/1851592.html
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
创建存储过程1 课程目标 1)了解 ——存储过程的优点; 2)理解 —— 存储过程的概念; 3)掌握 —— 存储过程的创建方法; 存储过程优点 使用存储过程的优点有: (1)存储过程在服务器端运行,执行速度快。 (2)...
【例】 创建一个Bookstore数据库的存储过程,根据用户姓名和书名查询订单,如果订购册数小于5本不打折,订购册数在5-10本之间,订购单价打九折,订购册数大于10本,订购单价打八折。 DELIMITER $$ CREATE PROCEDURE ...
在本主题中,我们将深入探讨如何使用MySQL5创建存储过程,并结合PL/SQL语言来实现分表功能。 首先,让我们了解存储过程的基本语法。在MySQL中,创建存储过程通常包含以下部分: 1. `CREATE PROCEDURE` 关键字,...
MySQL存储过程是数据库管理系统中的一种重要功能,它允许程序员或数据库管理员预编译一系列SQL语句,形成一个可重用的程序单元。在本场景中,我们关注的是如何利用存储过程进行数据库的备份与还原,这在数据管理中至...
在MySQL中,创建存储过程通常使用`CREATE PROCEDURE`语句,定义输入、输出或输入/输出参数,并在BEGIN和END之间编写SQL语句。例如: ```sql CREATE PROCEDURE GetCustomerOrders(IN customerId INT, OUT ...
创建存储过程并循环添加记录是数据库管理中的常见任务,尤其是在需要批量插入数据时。以下将详细解释如何在MySQL中实现这一功能。 首先,我们需要了解存储过程的基本创建方法。在MySQL中,我们使用`CREATE ...
本篇文章将深入探讨如何使用Java与MySQL数据库进行交互,实现调用存储过程,并提供一个测试通过的实例。 首先,理解存储过程是数据库管理系统提供的一种预编译的SQL语句集合,它封装了特定的功能,可以提高执行效率...
例如,创建一个简单的存储过程来计算员工的总薪水,可以这样编写: ```sql CREATE PROCEDURE calculate_total_salary(IN emp_id INT) BEGIN DECLARE total DECIMAL(10,2); SELECT SUM(salary) INTO total FROM ...
在IT领域,数据库是数据...总结,用C调用MySQL数据库的存储过程涉及连接数据库、预处理SQL命令、绑定参数、执行存储过程、处理结果集以及释放资源等多个步骤。理解这些步骤和相关函数的使用是成功实现这一目标的关键。
本篇文章将详细介绍如何实现这一目标,将远程服务器的MySQL数据库自动定时备份并存储在本地。 首先,我们需要了解MySQL的数据备份类型。常见的备份方式有全量备份和增量/差异备份。全量备份是备份所有数据库或选定...
创建存储过程需要占用内存,只有当一批具有某种功能的语句需要被多次重复执行时,才有必要创建存储过程,提高工作效率。 2. 存储过程的分类 存储过程可以分为带参数和不带参数两种,一般情况,带参数的存储过程...
MySQL创建存储过程批量插入10万条数据 存储过程 1、首先防止主键冲突,我们清空表。 TRUNCATE table A_student; 2、编写存储过程 delimiter ‘$’; CREATE PROCEDURE batchInsert(in args int) BEGIN declare i int ...
创建另外一个存储过程sell_update,在其中调用第一个存储过程,如果给定参数为0,则修改由第一个存储过程插入记录的是否发货字段为'已发货',如果给定参数为1则删除第一个存储过程插入的记录,并将操作结果输出。...
一旦数据库创建成功,你可以通过USE语句切换到该数据库: ```sql USE my_database; ``` 然后,使用CREATE TABLE语句定义表结构,包括字段名、数据类型、约束等,比如: ```sql CREATE TABLE students ( id INT ...
在VB6中,连接MySQL数据库并调用存储过程是数据库操作的重要部分,这涉及到ADO(ActiveX Data Objects)技术的运用。ADO是Microsoft提供的一种数据访问接口,它允许程序员使用VB6等编程语言来访问各种数据源,包括...
在C#编程环境中,与MySQL数据库进行交互是常见的任务,特别是在需要存储非结构化数据如图片时。本示例将详细介绍如何使用C#连接到MySQL数据库,并实现图片的存储功能。 首先,确保你已安装了MySQL数据库服务器以及...
根据提供的文件内容,本篇实验报告主要围绕MySQL数据库中存储过程和函数的应用,涵盖了创建存储过程、函数、游标以及异常处理等高级特性。下面将详细解析报告中的每个知识点。 1. 创建存储过程 存储过程是一种在...
- 创建存储过程: ```sql CREATE PROCEDURE 存储过程名 (@参数1 数据类型 = [默认值] OUTPUT, @参数2 数据类型 = [默认值] OUTPUT) AS SQL语句 ``` - 调用存储过程: ```sql EXEC 过程名 [参数] ``` ...