游标

作者: 每天进步一点点变成更好的自己 | 来源:发表于2022-05-24 12:22 被阅读0次

存储过程或函数中的查询有时会返回多条记录,而使用简单的SELECT语句,没有办法得到第一行、下一行或前十行的数据,这时可以用游标来逐条读取查询结果集中的记录。

1、游标

游标:用来依次取出查询结果集中的每一条数据一一逐条读取查询结果集中的记录。

1、游标的使用步骤:

  • 1、1声明游标语法:declare 游标名 cursor FOR select查询语句;
    实例:declare my_cursor cursor FOR select book_name.book_author,book_price from books;
  • 1、2 声明游标:主要用来给游标命名并且使得游标关联一个查询。

具体语句:
DECLARE CURSOR stunames [(parameter_name,dataTYPE,...)] IS SELECT s.sname FROM student s ; stuname student.sname%TYPE;
语法说明:
CURSOR : 声明游标关键字;
stunames: 游标的名字 ;
parameter_name: 参数名称;
dataTYPE: 参数类型;
SELECT s.sname FROM student s:游标关联的SELECT语句,但该语句不能是SELECT....INTO ...语句

2、打开游标:open 游标名
实例:open my_cursor

3、使用游标:提取游标当前指向的记录(提取之后,游标自动下移)
FETCH 游标名 INTO bname,bauthor,bprice;
实例:FETCH my_cursor INTO bname,bauthor,bprice;

4、关闭游标:colse 游标名
实例:close my_cursor

--语法:DECLARE cursor_name CURSOR FOR select_statement;

mysql> DELIMITER //
mysql> CREATE PROCEDURE processnames()
    -> BEGIN
    -> DECLARE nameCursor CURSOR  --cursor_name :nameCursor 游标名
    -> FOR
    -> SELECT name FROM tb_student; ---select_statement表示select语句,可以返回一行或多行数据
    -> END//
Query OK, 0 rows affected (0.07 sec)

mysql> DELIMITER //
mysql> CREATE PROCEDURE test_cursor (in param INT(10),out result VARCHAR(90))
    -> BEGIN
    -> DECLARE name VARCHAR(20);
    -> DECLARE pass VARCHAR(20);
    -> DECLARE done INT;
    -> DECLARE cur_test CURSOR FOR SELECT user_name,user_pass FROM users; ---声明游标,定义游标参数变量
    -> DECLARE continue handler FOR SQLSTATE '02000' SET done = 1;
    -> IF param THEN INTO result FROM users WHERE id = param;
    -> ELSE
    -> OPEN cur_test;     ---------------打开游标
    -> repeat
    -> FETCH cur_test into name,pass; -----------使用游标:将游标cur_test中SELECT语句的执行结果保存到参数变量name,pass中。变量参数必须在游标使用之前进行定义。
    -> SELECT concat_ws(',',result,name,pass) INTO result;
    -> until done
    -> END repeat;
    -> CLOSE cur_test;   -----------关闭游标
    -> END IF;
    -> END //
Query OK, 0 rows affected (0.10 sec)

mysql> call test_cursor(3,@test)//
Query OK, 1 row affected (0.03 sec)

mysql> select @test//
+-----------+
| @test     |
+-----------+
| ling,ling123 |
+-----------+
1 row in set (0.00 sec)

相关文章

  • MongoDB之文档游标

    游标 查询操作返回的结果游标 游标的迭代与操作 db.collecton.find() 返回一个文档集合游标,在不...

  • sqlserver 游标

    游标更新删除当前数据 1.声明游标 2.打开游标 3.声明游标提取数据所要存放的变量 4.定位游标到哪一行 5.关...

  • Oracle 存储过程学习笔记

    1、存储过程简单实例 2.游标实现方式 显式游标实现方式(可多值) 隐式游标(可以实现查询多值) 带有参数的游标(...

  • sql server 游标

    定位到结果集中某一行 游标分类 静态游标(Static):在操作游标的时候,数据发生变化,游标中数据不变。 动态游...

  • 实验九 游标操作和自定义函数

    一.实验目的: 掌握游标的声明、游标打开、标数据的提取、游标的关闭和游标的释放 掌握标量值函数的定义与调用 掌握内...

  • sql 游标,函数,触发器

    游标是数据库的一种机制或类型,可以存储结果集 ,迭代和遍历结果集,oracle中游标大致分为显示游标和隐式游标。 ...

  • GraphQL(七):GraphQL分页及原理分析

    基于GraphQl-JAVA 11.0 GraphQL的分页是基于游标的,游标分页的方式可以提升用户体验,关于游标...

  • SQL-游标循环记录

    declare @temp_temp int --创建游标 --Local(本地游标) DECLARE a...

  • Mongodb学习笔记(四)之 游标操作

    游标操作 cursor (1)游标是什么?通俗来说,游标不是查询结果,而是查询的返回资源或接口。(2)通过这个接口...

  • 游标

    显示游标 显示游标属性 1.%ISOPEN:布尔值,游标是否打开2.%FOUND:布尔值,FETCH附近,缓存区中...

网友评论

      本文标题:游标

      本文链接:https://www.haomeiwen.com/subject/ftucprtx.html