- 浏览: 1078696 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (399)
- C++ (39)
- Java (74)
- Java界面开发学习笔记 (4)
- Java用户的c++之旅 (0)
- 自言自语 (12)
- DSP (1)
- MCU (0)
- CG (0)
- Jabber (0)
- Gloox (0)
- Linux (11)
- Windows (19)
- Networks (4)
- Jobs (0)
- PHP (1)
- JSP (2)
- 生活 (35)
- C (2)
- Qt4 (2)
- C# (50)
- WPF (5)
- ASP (2)
- FLEX (47)
- SQL (20)
- JavaScript (12)
- SharePoint (6)
- GWT (1)
- Dojo (9)
- HTML (11)
- Others (7)
- 如何安装配置系列 (7)
- UML (2)
- Android (3)
- alibaba (1)
最新评论
-
zxjlwt:
学习了http://surenpi.com
Firefox插件开发: Hello World! -
ylldzz:
楼主知道MVEL怎么调试么
MVEL简介及快速使用 -
blueman2012:
您好,可否提供源码下载,我把您的代码贴过来后,好多报错的,谢谢 ...
Log4J日志解析 -
svygh123:
你的游标都没有关闭呢!
MYSQL游标嵌套循环示例 -
dizh:
写的很好啊
MVEL简介及快速使用
本文将举例演示游标的嵌套用法,首先建造表结构,如下:
drop table if exists `tb_user`; create table tb_user ( id bigint(22) not null auto_increment primary key, name varchar(20) not NULL, age tinyint(3), gmt_create date, gmt_modified date ); drop table if exists `tb_user_param`; create table tb_user_param ( id bigint(22) not null auto_increment primary key, user_id bigint(22) not null, code varchar(100) not null, value varchar(1000), gmt_create DATE, gmt_modified date ); drop procedure if exists `sp_init_data`; create procedure `sp_init_data`() begin declare v_i bigint(22) default 0; declare v_uid bigint(22); declare v_nick varchar(20) default 'lanbo_'; declare v_code_1 varchar(20) default 'address'; declare v_code_2 varchar(20) default 'phone'; declare v_code_3 varchar(20) default 'wangwang_id'; declare v_value_1 varchar(20) default 'HZ.XiHu'; declare v_value_2 varchar(20) default '1875757198'; declare v_value_3 varchar(20) default 'shansun_'; while v_i < 10 do set v_i = v_i + 1; insert into tb_user values (null, concat(v_nick, v_i), 23, now(), now()); select LAST_INSERT_ID() into v_uid; insert into tb_user_param values(null, v_uid, v_code_1, v_value_1, now(), now()); insert into tb_user_param values(null, v_uid, v_code_2, concat(v_value_2, v_i), now(), now()); insert into tb_user_param values(null, v_uid, v_code_3, concat(v_value_3, v_i), now(), now()); end while; commit; end; call sp_init_data(); drop table if exists `tb_key_value`; create table `tb_key_value`( uid bigint(22) not null, k varchar(100), v varchar(100) );
我们插入了10条数据到tb_user中,如果tb_user中未定义的字段如address,则放置在tb_user_param中,该表是个key_value的结构,由uid+code定位。
后面我们要做的是,将根据tb_user中的uid找到tb_user_param中相关记录后,将key_value信息转移到tb_key_value表中,为达到演示效果,我们使用嵌套游标操作数据,代码如下:
drop procedure if exists `sp_nested_cursor`; create procedure `sp_nested_cursor`() begin declare v_uid bigint(22); declare v_code varchar(100); declare v_value varchar(100); declare _done TINYINT(1) default 0; declare cur_user cursor for select id from `tb_user`; declare continue handler for not found set _done = 1; open cur_user; loop_xxx:loop fetch cur_user into v_uid; if _done=1 then leave loop_xxx; end if; begin declare _inner tinyint(1) default 0; declare cur_param cursor for select code, value from `tb_user_param` where user_id=v_uid; declare continue handler for not found set _inner = 1; open cur_param; loop_yyy:loop fetch cur_param into v_code, v_value; if _inner=1 then leave loop_yyy; end if; insert into tb_key_value values (v_uid, v_code, v_value); end loop; commit; end; end loop; end; call `sp_nested_cursor`();如果想跟踪上面程序的执行过程,可以借助MySQL Debugger工具调试学习。
发表评论
-
[转]利用Oracle的row_number() over函数消除重复的记录
2011-05-08 23:24 20191.select d.id,d.outer_code ... -
MySQL存储过程☞错误处理相关知识总结
2011-03-29 08:51 1166MySQL错误码:http://dev.mysql.com/d ... -
SQL Manager 2010 for Mysql Free Edition
2011-03-26 20:43 2843最近用了Windows Server 20 ... -
Oracle 和 mysql 的一些简单命令对比参照
2011-01-22 00:43 1089Oracle mysql 对比版 ... -
MySQL计算两个日期相差的天数
2011-01-22 00:40 2500select to_days('2011-05-11') - ... -
PL/SQL块中如何调用DDL语句(sql)
2011-01-11 11:13 1911在PL/SQL块中不能直接调用DDL语句,可以利用下面的 ... -
ORA-01810: format code appears twice
2010-11-16 14:49 1425Oralce中的to_date()函数用于将字符串转换为 ... -
These query results are not updateable.Include the ROWID...
2010-10-19 14:36 8306http://www.zlsoft.com/tec ... -
MSSQL 2005删除所有表的语句
2010-05-05 13:51 1197godeclare @tbname varchar(250)d ... -
”SQL BPA command line has encountered a problem and needs to close“的解决方法
2010-04-28 11:17 1685There should exist on the s ... -
安装SQL Server 2005时,出现“Edition Change Check”警告的解决方法
2010-04-28 11:15 1779安装VS2008之后,又安装SQL Server 2005时, ... -
SQL SERVER 2005 中sa用户登录和新建用户
2010-04-13 12:25 3114'用户 'sa' 登录失败。该用户与可信 SQL Server ... -
SQL Server 2005 Remote Connection is not enabled 解决方法
2010-04-13 10:35 1332go to sql server configuration ... -
MySQL汉字乱码问题的几种解决方法
2009-11-14 17:04 17151.在安装Mysql时其实可能选择使用GBK来处理汉字,由于以 ... -
Access denied for user 'root'@'localhost' (using password: YES)
2009-07-24 13:00 8649Access denied for user 'root'@' ... -
SQL语句摘录--FOR MSSQL
2009-07-21 12:56 1182下列语句部分是Mssql语句,不可以在access中使用。 ... -
MySQL时间列自动插入当前时间
2009-07-20 22:28 2010注意:用current_timestamp,不过这个默认值只用 ... -
MySQL,SQL Server,Oracle中连接字符串的操作
2009-06-08 21:21 1643MySQL: select concat(ename, ' i ... -
MySQL怎么查询排序后结果集的前[N, M]条记录
2009-06-03 13:23 9809今天群里有人提了这么一个问题,原话是: “表T(a,b,c,d ...
相关推荐
MySQL 游标嵌套实践 本文档旨在介绍 MySQL 游标嵌套的概念和实践,通过对游标的嵌套使用,演示如何实现复杂的数据操作。 一、游标嵌套简介 游标(Cursor)是数据库中的一种控制结构,可以用来遍历查询结果集。...
总结来说,这个示例展示了如何在MySQL存储过程中使用游标进行循环处理,并在循环内部再次嵌套游标以实现更精细的数据操作。这种技术在处理大量数据或执行复杂逻辑时非常有用,尤其是在需要逐行检查和处理数据的情况...
以上就是MySQL游标的定义、使用和关闭的基本概念以及如何处理游标循环的细节。理解这些概念对于编写涉及复杂数据处理的存储过程至关重要。记住,游标虽然提供了逐行处理数据的能力,但也需要注意性能影响,因为它们...
drop PROCEDURE if exists my_procedure; create PROCEDURE my_procedure(in my_id int,out my_name... 您可能感兴趣的文章:Mysql存储过程循环内嵌套使用游标示例代码MySQL 存储过程中执行动态SQL语句的方法Mysql存储过
此外,还将深入到更复杂的SQL操作,如JOIN用于联接多个表,子查询用于嵌套查询,以及视图和存储过程的使用。 两者结合的部分,教程会展示如何在PHP中连接MySQL数据库,执行SQL查询,处理查询结果,并将数据动态显示...
总的来说,MySQL存储过程中的代码块、条件控制、迭代以及游标和处理器的使用,共同构建了一个强大的数据库编程环境,能够处理复杂的业务逻辑和数据操作。理解并熟练掌握这些概念,对于提升数据库应用的效率和灵活性...
5. **循环遍历数据**:在`write_data_to_excel`函数中,通过两个嵌套的for循环遍历查询结果的每一行和每一列。`sheet.write(i, j, result[i][j])`将数据写入Excel单元格,其中i和j分别代表行号和列号。 6. **文件...
子查询指的是在一个查询语句内部嵌套另一个查询语句。这种查询方式能够根据内层查询的结果来进一步筛选外层查询的条件或结果集。 **应用场景**:例如,我们需要找出所有部门名称为“HR”的员工的名字,可以通过如下...
- 游标操作:了解游标的创建、打开、读取和关闭等操作步骤。 #### 七、Oracle数据库ISO镜像下载 提供Oracle数据库的ISO镜像文件下载链接,方便用户进行安装部署。 - **Oracle数据库安装**: - 镜像文件获取:...
- **FOR的使用**:使用FOR循环处理游标。 - **BULK COLLECT使用**:一次性获取多行数据。 - **SELECT INTO的使用方式**:将查询结果赋值给变量。 - **FETCH INTO的使用方式**:从游标中获取数据并赋值给变量。 - **...
新版的《SQL必知必会》还更新了针对不同数据库管理系统(DBMS)的示例,如Apache OpenOffice Base、MariaDB、SQLite、Oracle、SQL Server、MySQL和PostgreSQL。这使得读者能更好地理解和适应各种环境下的SQL使用。 ...
SQL(Structured Query Language)是一种用于管理关系数据库的标准语言,它被广泛应用于各种数据库管理系统中,如MySQL、Oracle、SQL Server等。这篇博客“一点sql语句总结”可能涵盖了SQL的基本概念、常用操作以及...
SQL(Structured Query Language)是用于管理和处理关系数据库的标准编程语言,它被广泛应用于各种数据库管理系统,如MySQL、Oracle、SQL Server等。SQL 参考手册是数据库管理员、开发者和数据分析人员的重要工具,...
提供的文档《SQL存储过程实例.docx》和《sql存储过程教程.txt》应包含更多具体的示例和实践指导,帮助深入理解和掌握存储过程的使用。 总结,存储过程是数据库中的重要工具,它提升了效率,增强了安全性,并简化了...
11. **游标(Cursor)**:允许程序逐行处理查询结果,常在需要逐行处理数据或在循环中操作数据时使用。 12. **SQL优化**:包括选择合适的索引、避免全表扫描、减少子查询、优化联接操作等,以提高查询性能。 如果...
18. **游标**:允许逐行处理查询结果,常用于循环处理大量数据。 19. **事务**:一组操作,要么全部成功,要么全部回滚,确保数据一致性,如`BEGIN TRANSACTION; ...; COMMIT/ROLLBACK`。 20. **权限管理**:`...
- **游标**:CURSOR的使用及其在循环处理中的作用。 - **函数**:内置函数和用户自定义函数的定义及使用方法。 #### 二十一、存储过程 - **存储过程定义**:PROCEDURE的创建和调用。 - **存储过程的优点**:提高...
4.1.3 语句的嵌套 43 4.2 switch多分支语句 45 4.2.1 基本语法 45 4.2.2 合法的判断表达式 46 4.2.3 合法的case表达式 47 4.2.4 详细执行流程 49 4.3 while循环语句 50 4.4 do-while循环语句 52 4.5...