游标(cursor)是一个存储在MySQL做事器上的数据库查询, 它不是一条SELECT语句,而是被该语句检索出来的后果集。在存储了游 标之后,诈欺门径不错把柄需要转化或浏览其中的数据。
谛视:MySQL游标只可用于 存储流程(和函数)。
创建游标在创建一个游标前,咱们需要先铲除游所在语法
1、界说游标
DECLARE 游标称号 CURSOR FOR SQL语句;
2、翻开游标
OPEN 游标称号;
3、取得后果
FETCH 游标称号 INTO 变量称号[,变量称号];
4、关闭游标
CLOSE 游标称号;
咱们以Customers表来四肢示例
示例一
界说一个存储流程,调用的时分扩充内部的游标
CREATE PROCEDURE PROC1() BEGIN -- 界说两个存放后果的变量 DECLARE NAME VARCHAR(20); DECLARE ADDR VARCHAR(50); -- 声明游标 DECLARE MY CURSOR FOR SELECT 姓名,地址 FROM customers; -- 翻开游标 OPEN MY; -- 取得后果 FETCH MY INTO NAME,ADDR; -- 这里是为了泄露取得后果 SELECT NAME,ADDR; -- 关闭游标 CLOSE MY; END;
咱们扩充完上头的存储流程后, 大量情侣网站就不错调用该存储流程了
CALL PROC1();
得到后果:
这里笃定有小伙伴兴趣,customers内外明明有7札纪录,为什么只泄露了1札纪录?
这是因为游所在变量只保留了customers表中的第一滑数据,淌若要稽查背面的数据,就需要轮回往下出动游标,2022澳门彩免费资料大全材干连接稽查。
示例二
界说一个存储流程,调用存储流程时,将表customers里的数据轮回写入新的表内部。
CREATE PROCEDURE PROC2() BEGIN -- 界说两个存放后果的变量 DECLARE FLAG INT DEFAULT 0; DECLARE NAME VARCHAR(20); DECLARE ADDR VARCHAR(50); -- 声明游标 DECLARE MY CURSOR FOR SELECT 姓名,地址 FROM customers; DECLARE CONTINUE HANDLER FOR NOT FOUND SET FLAG=1; -- 翻开游标 OPEN MY; -- 轮回体部分 L1:LOOP -- 取得后果 FETCH MY INTO NAME,ADDR; IF FLAG=1 THEN LEAVE L1; END IF; -- 这里是为了泄露取得后果 INSERT INTO cus VALUES(NAME,ADDR); -- 关闭游标 END LOOP; -- 死心轮回 CLOSE MY; END;
然后咱们扩充这个存储流程,并查询cus内外的数据
CALL PROC2(); SELECT * FROM cus;
后果:
后果与customers里的一致,然则这些后果是轮回一条一条往下出动的流程中插入的,即这个轮回扩充了7次。
以上即是游所在基本操作旨趣了,此外游所在轮回体还有WHILE,REPEAT等操作方式,他们的操作方式与LOOP近似,都是用来轮回扩充轮回体内部的实质,直到轮回死心。
Powered by chinese熟妇与小伙子mature @2013-2022 RSS地图 HTML地图