mysql c 游标_mysql8 参考手册--CURSOR 游标语句

MySQL支持存储程序内部的游标。语法与嵌入式SQL中的语法相同。游标具有以下属性:

不敏感:服务器可能会或可能不会复制其结果表

只读:不可更新

不可滚动:只能在一个方向上遍历,不能跳过行

游标声明必须出现在处理程序声明之前,变量和条件声明之后。

例:

CREATE PROCEDURE curdemo()

BEGIN

DECLARE done INT DEFAULT FALSE;

DECLARE a CHAR(16);

DECLARE b, c INT;

DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1;

DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cur1;

OPEN cur2;

read_loop: LOOP

FETCH cur1 INTO a, b;

FETCH cur2 INTO c;

IF done THEN

LEAVE read_loop;

END IF;

IF b < c THEN

INSERT INTO test.t3 VALUES (a,b);

ELSE

INSERT INTO test.t3 VALUES (a,c);

END IF;

END LOOP;

CLOSE cur1;

CLOSE cur2;

END;

CLOSE游标语句

CLOSE cursor_name

该语句关闭先前打开的游标。

如果光标未打开,则会发生错误。

如果BEGIN ... END未显式关闭游标,则在声明游标的块末尾将其关闭

DECLARE游标语句

DECLARE cursor_name CURSOR FOR select_statement

该语句声明一个游标,并将其与一条SELECT语句相关联,该 语句检索该游标要遍历的行。要在以后获取行,请使用一条FETCH语句。SELECT语句检索的列数 必须与语句中指定的输出变量数匹配 FETCH。

该SELECT语句不能有INTO子句。

游标声明必须出现在处理程序声明之前,变量和条件声明之后。

存储的程序可能包含多个游标声明,但是在给定块中声明的每个游标都必须具有唯一的名称。

对于通过SHOW语句可用的信息 ,在许多情况下,可以通过将游标与INFORMATION_SCHEMA表一起使用来获取等效信息。

游标FETCH语句

FETCH [[NEXT] FROM] cursor_name INTO var_name [, var_name] ...

该语句获取SELECT与指定游标(必须是打开的)关联的语句的下一行 ,并前进游标指针。如果存在一行,则提取的列将存储在命名变量中。SELECT语句检索的列数 必须与语句中指定的输出变量数匹配 FETCH。

如果没有更多行可用,则使用SQLSTATE value发生No Data条件'02000'。要检测此条件,可以为其设置处理程序(或 NOT FOUND条件)。

请注意,另一个操作(例如a SELECT或another FETCH)也可能通过引发相同条件来使处理程序执行。如果有必要区分哪个操作引发了这种情况,请将该操作放在其自己的 BEGIN ... END块中,以便可以将其与自己的处理程序关联。

OPEN游标语句

OPEN cursor_name

该语句打开一个先前声明的游标。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值