(mysql存储过程游标循环使用介绍.doc
文本预览下载声明
mysql存储过程 游标 循环使用介绍
今天分享下自己对于Mysql存储过程的认识与了解,这里主要说说大家常用的游标加循环的嵌套使用
Mysql的存储过程是从版本5才开始支持的,所以目前一般使用的都可以用到存储过程。今天分享下自己对于Mysql存储过程的认识与了解。一些简单的调用以及语法规则这里就不在赘述,网上有许多例子。这里主要说说大家常用的游标加循环的嵌套使用。 首先先介绍循环的分类: (1)WHILE ... END WHILE (2)LOOP ... END LOOP (3)REPEAT ... END REPEAT (4)GOTO 这里有三种标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环。还有一种非标准的循环方式:GOTO(不做介绍)。 (1)WHILE ... END WHILE
复制代码 代码如下:
CREATE PROCEDURE p14() BEGIN DECLARE v INT; SET v = 0; WHILE v 5 DO INSERT INTO t VALUES (v); SET v = v + 1; END WHILE; END;
这是WHILE循环的方式。它跟IF语句相似,使用SET v = 0;语句使为了防止一个常见的错误,如果没有初始化,默认变量值为NULL,而NULL和任何值操作结果都为NULL。 (2)REPEAT ... END REPEAT
复制代码 代码如下:
CREATE PROCEDURE p15 () BEGIN DECLARE v INT; SET v = 0; REPEAT INSERT INTO t VALUES (v); SET v = v + 1; UNTIL v = 5 END REPEAT; END;
这是REPEAT循环的例子,功能和前面WHILE循环一样。区别在于它在执行后检查结果,而WHILE则是执行前检查。类似于do while语句。注意到UNTIL语句后面没有分号,在这里可以不写分号,当然你加上额外的分号更好。 (3)LOOP ... END LOOP
复制代码 代码如下:
CREATE PROCEDURE p16 () BEGIN DECLARE v INT; SET v = 0; loop_label: LOOP INSERT INTO t VALUES (v); SET v = v + 1; IF v = 5 THEN LEAVE loop_label; END IF; END LOOP; END;
以上是LOOP循环的例子。LOOP循环不需要初始条件,这点和WHILE循环相似,同时它又和REPEAT循环一样也不需要结束条件。 ITERATE 迭代 如果目标是ITERATE(迭代)语句的话,就必须用到LEAVE语句
复制代码 代码如下:
CREATE PROCEDURE p20 () BEGIN DECLARE v INT; SET v = 0; loop_label: LOOP IF v = 3 THEN SET v = v + 1; ITERATE loop_label; END IF; INSERT INTO t VALUES (v); SET v = v + 1; IF v = 5 THEN LEAVE loop_label; END IF; END LOOP; END;
ITERATE(迭代)语句和LEAVE语句一样也是在循环内部的循环引用, 它有点像C语言中 的“Continue”,同样它可以出现在复合语句中,引用复合语句标号,ITERATE(迭代)意思 是重新开始复合语句。 以上是对于循环的几种情况的介绍。接着就是介绍一个带游标的例子来详细解释。
复制代码 代码如下:
begin declare p_feeCode varchar(20); declare p_feeName varchar(20); declare p_billMoney float(12); declare p_schemeMoney float(12); declare allMoney float(10); declare allUsedMoney float(10); declare p_year varchar(50); declare p_totalCompeleteRate float(12); declare done int(10); declare flag int(2); declare feeCodeCursor cursor for select fe
显示全部