由于MySQL默认以";"为分隔符,则过程体的每一句都被MySQL以存储过程编译,则编译过程会报错;所以要事先用DELIMITER关键字申明当前段分隔符
一般使用delimiter //
用完了就把分隔符还原。恢复使用“;”(分号)作为分隔符,输入下面语句就可以了:
delimiter ; //[img][/img]
实例及说明
CREATE PROCEDURE p25 (OUT return_val INT)
/*创建存储过程,参数及类型的声明,由in,out inout可选*/
BEGIN /*存储过程体开始*/
DECLARE a,b INT; /*变量声明*/
DECLARE cur_1 CURSOR FOR SELECT s1 FROM t; /*游标声明*/
DECLARE CONTINUE HANDLER FOR NOT FOUND /*错误处理的声明*/
/*这三个变量的声明的顺序是不能颠倒的,首先事变量的声明,然后是条件声明,接着游标声明,最后声明错误处理器*/
SET b = 1; /**/
OPEN cur_1;
/*存储过程执行的第一句,即存储过程从这里开始执行。过程将执行“SELECT s1 FROM t”,并返回一个结果集*/
REPEAT /*循环开始*/
FETCH cur_1 INTO a;
/*这里第一个FETCH语句会获得一行从SELECT产生的结果集中检索出来的值,然而表t中有多行,因此这个语句会被执行多次,当然这是因为语句在循环块内。*/
UNTIL b = 1
/*最后当MySQL的FETCH没有获得行时,CONTINUE处理被触发,将变量b赋值为1,而执行到这一句条件为真,循环结束*/
END REPEAT;
CLOSE cur_1;/*关闭游标*/
SET return_val = a;
/*这个例程中我们为输出参数指派了一个局部变量,这样在过程结束后的结果仍能使用。*/
END;//
执行存储过程
mysql> CALL p25(@return_val)//
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @return_val//
如果看到return_val参数获得了是表t的最后一行,游标工作正常,出错处理也工作正常。
执行顺序在附件中,自己的理解不对的还请多多指教
在开发过程中有几点要注意:
1、存储过程注释:MySQL支持采用--或者/**/注释,其中前者是行注释,后者是段式注释
2、变量首先用declare申明,其中临时变量可以直接以@前缀修饰以供引用
3、直接采用MySQL的Administrator管理器编辑时,可以直接采用如下函数文本录入;
但若在脚本中自动导入存储过程或函数时,由于MySQL默认以";"为分隔符,则过程体的每一句都被MySQL以存储过程编译,则编译过程会报错;所以要事先用DELIMITER关键字申明当前段分隔符用完了就把分隔符还原。 如下所示:
DELIMITER //
Stored Procedures and Functions
DELIMITER ;
4、MySQL支持大量的内嵌函数,有些是和大型商用数据库如oracle、informix、sybase等一致,但也有些函数名称不一致,但功能一致;或者有些名称一致,但功能相异,这个特别对于从 这些数据库开发转过来的DBA要注意。
5、存储过程或函数的调试:我目前还没有研究MySQL所带的各种工具包,还不清楚其提供了调试工具没有,不过编译错误相对好查找;至于业务流程的调试,可以采用一个比较笨的方法,就是创建一个调试表,在包体中各个流程点都插入一条记录,以观察程序执行流程。这也是一个比较方便的笨 办法。
- 大小: 47.7 KB
分享到:
相关推荐
Mysql存储过程游标触发器
在“mysql存储过程_游标_项目练习”中,我们可能需要完成以下任务: 1. 创建存储过程:编写SQL语句来定义一个存储过程,包括输入参数(如果需要的话)、处理逻辑以及返回值(可选)。 2. 使用游标:在存储过程中...
"Oracle存储过程游标详解" Oracle 存储过程游标是指在 Oracle 数据库中使用游标来实现对结果集的处理和操作。游标可以分为静态游标和REF游标两种类型。静态游标是指结果集已经确实(静态定义)的游标,可以进一步...
在MySQL中,游标是一种数据库对象,主要用于处理存储过程中的结果集。游标允许我们逐行地读取查询结果,这对于需要对每一行数据执行特定操作的情况非常有用。通过使用游标,我们可以实现更加灵活的数据处理逻辑。 #...
mysql存储过程 多个游标循环(依次执行,非嵌套循环)REPEAT循环。有需要的可自行下载。
MySQL中的动态游标是数据库处理过程中非常有用的一个特性,它允许在存储过程中逐行处理查询结果。在本示例中,我们将深入探讨如何在MySQL中使用动态游标,特别是结合存储过程来实现这一功能。 首先,创建了一个名为...
总结来说,这个示例展示了如何在MySQL存储过程中使用游标进行循环处理,并在循环内部再次嵌套游标以实现更精细的数据操作。这种技术在处理大量数据或执行复杂逻辑时非常有用,尤其是在需要逐行检查和处理数据的情况...
总结来说,MySQL存储过程中的游标和循环机制提供了强大的数据处理能力。通过游标,我们可以逐行处理数据,结合循环结构,能够灵活地实现复杂的数据操作逻辑。在实际应用中,这些工具常用于批量插入、更新、计算统计...
根据提供的文件信息,本文将详细解释一个MySQL存储过程的例子,其中包含了游标的使用。这个存储过程主要用于处理一批数据,涉及到日期范围内的数据处理、异常处理等。下面将逐一解析存储过程中涉及的重要知识点。 #...
MySQL 存储过程与游标的混合使用,也没啥重要的,就是和其他数据库有一些不同而已,作为总结,以后复习
本文实例讲述了mysql存储过程之返回多个值的方法。分享给大家供大家参考,具体如下: mysql存储函数只返回一个值。要开发返回多个值的存储过程,需要使用带有INOUT或OUT参数的存储过程。咱们先来看一个orders表它的...
总结一下,MySQL存储过程中的游标循环提供了灵活的方式来处理数据。`REPEAT`、`WHILE`和`LOOP`各有特点,可以根据具体需求选择适合的循环类型。在循环内部,`ITERATE`和`LEAVE`提供了对流程控制的细化操作,使得我们...
在这个"MySQL存储过程学习"的主题中,我们将深入探讨存储过程的定义、创建、调用以及其在数据库管理中的实际应用。 首先,理解存储过程的基本概念是至关重要的。存储过程是一组为了完成特定功能的SQL语句集合,这些...
Mysql存储过程、游标、函数调用、事务处理、触发器代码示例,可用作学习参考。
MySql存储过程,游标的使用方法,速度极快!
除了基础的游标操作,MySQL还支持其他特性,如:嵌套游标(一个游标内部使用另一个游标)、可滚动游标(允许向前和向后移动)以及隐式游标(无需显式声明,常在存储过程中使用)。 在实际应用中,游标常常用于以下...
本资源结合实例实现一个复杂的存储过程,存储过程中有用到游标、临时表、循环、递归等知识,sql文件附有实例数据表创建的sql语句。
MySQL 从 5.0 版本开始支持存储过程和触发器,而游标在递归树结构中非常有用。游标是 MySQL 中的一种机制,允许开发人员在存储过程和触发器中控制数据的获取和处理。 在 MySQL 中,游标是通过 DECLARE 语句定义的,...