1.游标的认识和作用
1.1 什么是游标?
- 游标Cursor是处理数据的一种方法,用来查看或者处理结果集中的数据,游标提供了在结果集中一次一行或者多行向前或向后浏览数据的能力;
- 游标相当于一个指针,它可以指定结果中的任何位置,允许用户对指定位置的数据进行处理;
- 游标可以被看作是一个临时文件,提供了在查询结果集中向前或向后浏览护具、处理结果集中数据的能力。
1.2 游标的作用是什么?
- 游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录进行处理的机制。
- 用户可以访问结果集中任意一行数据,在将游标放置到某行之后可以在该行或从该位置的行块上执行操作。
- 其实就是用于存放查询出来的多条记录的一个临时变量,我们可以从这个变量中取出我们需要的信息字段。
2.游标的优点和缺点
2.1 游标的优点
- sql的游标是一种临时的数据库对象,即可以用来存放在数据库表中的数据行副本,也可以指向存储在数据库中的数据行的指针。
- 游标提供了在逐行的基础上操作表中数据的方法;
- 游标的常见用途就是保存查询结果,以便之后的使用;
- 创建一次游标结果集而重复使用若干次,比重复查询数据库要快很多。
2.2 游标的缺点
- 当我们做的数据量大,而且系统上跑的不止我们一个业务时,尽量避免使用游标,游标使用时会对行加锁,可能会影响其他业务的正常进行;
- 当数据量大时其效率比较低效;
- 游标其实是相当于把磁盘整体放入了内存中,如果游标数据量大则会造成内存不足,所以在数据量小时才使用游标。
- 尽管游标能遍历结果中的所有行,但他一次只指向一行。
3.游标的细节认识
3.1 游标的分类
游标有两种类型:隐式游标和显示游标
单行使用隐式游标:我们使用到的SELECT .... INTO...查询语句,一次只能从数据库中提取一行数据,对于这种形式的查询和DML操作,系统都会使用一个隐式游标
多行使用显示游标:如果提取多行数据,需要程序员定义一个显示游标,并通过与游标有关的语句进行处理。显示游标对应一个返回结果为多行多列的select语句。显示游标的定义如下图:
3.2 游标的四种属性
1.SQL%ROWCOUNT:返回值位一个整形数字,代表DML语句成功执行的数据行数
2.SQL%FOUND:布尔型值为TRUE代表插入、删除、更新或单行查询操作成功
3.SQL%NOTFOUND:布尔型值为true表示插入、删除、更新或单行查询操作失败
4.SQL%ISOPEN:布尔型DML执行过程中为真,结束后为假
4.游标的使用有哪些?
隐式游标的使用:
使用它们进行一些流程控制,如下:
显示游标的使用:
curse curson_name[参数1 参数类型,参数2 参数类型] is select 语句;
游标的使用步骤:
1. 定义游标:declare cursor 游标名称 for select查询语句 [for {readonly|update}]
2. 打开游标:open cursor
3. 从游标中操作数据:fetch... ... current of cursor
4. 关闭游标:close cursor
游标的遍历:两种方式
1.loop.....end loop;
实例:
2.使用for遍历
实例:
注意:
- 使用for循环遍历游标的好处:1.不用声明额外的变量,2.不用打开和关闭游标,3.写法简单。
- 使用游标时,一定要记得关闭游标;
- 在定义变量时需要注意定义的类型必须要和表中的字段类型一致,否则会出错