1.什么是游标?
从表中检索出结果集,从中每次指向一条记录进行交互的机制。
用来管理从数据源返回的数据的属性(结果集)。这些属性包括并发管理、在结果集中的位置、返回的行数,以及是否能够在结果集中向前和/或向后移动(可滚动性)。
游标跟踪结果集中的位置,并允许对结果集逐行执行多个操作,在这个过程中可能返回至原始表,也可能不返回至原始表。
换句话说,游标从概念上讲基于数据库的表返回结果集。
游动的光标(指针),可以指向一个结果集,通过游标的移动逐行提取每一行的记录 。
用来查询数据库,获取记录集合(结果集)的指针,可以让开发者一次访问一行结果集,在每条结果集上作操作。
用来存储多条查询数据的一种数据结构(结果集),它有一个指针,用来从上往下移动,从而达到遍历每条记录的作用。
由于它指示结果集中的当前位置,就像计算机屏幕上的光标指示当前位置一样,“游标”由此得名。
2.游标有什么作用?
①指定结果集中特定行的位置。
②基于当前的结果集位置检索一行或连续的几行。
③在结果集的当前位置修改行中的数据。
④对其他用户所做的数据更改定义不同的敏感性级别。
⑤可以以编程的方式访问数据库。
程序语言是面向记录的,一组变量一次只能存放一个变量或者一条记录,无法直接接收数据库中的查询结果集引入游标就解决了这个问题
3.为什么避免使用游标?
①在创建游标时,最需要考虑的事情是,“是否有办法避免使用游标?”
因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写;
如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作。
4.Oracle游标的类型?
①静态游标:结果集已经确实(静态定义)的游标。在执行前,明确知道sql语句游标 ,分为隐式和显示游标。
显示游标
用户显示声明的游标,即指定结果集。当查询返回结果超过一行时,就需要一个显式游标。用户自己写的sql语句,编译时能明确知道sql语句
隐式游标
所有DML语句(增、删、改、查询单条记录)为隐式游标,该变量名不需要用户自己声明,它由系统帮我们定义,叫sql。使用时不需要声明隐式游标,它由系统定义 .
隐式游标的使用:通过%rowcour判断是有使用了。
② 动态游标 (REF游标)
在执行前不知道sql语句游标,执行时才知道sql语句的游标。 动态关联结果集的临时对象。
强类型游标
规定返回类型
弱类型游标
不规定返回类型,可以获取任何结果集。
5.Oracle游标的状态有哪些,怎么使用游标属性?
如何判断是否到了结果集的尾部,oracle中,对于游标的属性,它通过属性值来判断的
①游标的状态是通过属性来表示。
%Found:用于检验游标是否成功,通常在fetch语句前使用,当游标按照条件查询一条记录是,返回true,Fetch语句(获取记录)执行情况True or False。
%NotFound :最后一条记录是否提取出True or False。 到了游标尾部,没有记录了,就返回true
%ISOpen: 游标是否打开True or False。
%RowCount:游标当前提取的行数 ,即获得影响的行数 1
②使用游标的属性。
例子:
Begin
Update emp Set SAL = SAL + 0.1 Where JOB = 'CLERK';
If SQL%Found Then
DBMS_OUTPUT.PUT_LINE('已经更新!');
Else
DBMS_OUTPUT.PUT_LINE('更新失败!');
End If;
End;
6.如何使用显示游标,?如何遍历循环游标?
①使用显示游标
一,
⑴声明游标:划分存储区域,注意此时并没有执行Select语句。
CURSOR 游标名( 参数 列表) [返回值类型] IS Select语句;
⑵打开游标:执行Select语句,获得结果集存储到游标中,此时游标指向结果集头, 而不是第一条记录。
Open 游标名( 参数 列表);
⑶获取记录:移动游标取一条记录
Fetch 游标名InTo 临时记录或属性类型变量;
⑷关闭游标:将游标放入缓冲池中,没有完全释放资源。可重新打开。
Close 游标名;
二,
1、声明游标:
cursor curname is select.......
2、打开游标:
open curname;
3、提取数据:循环提取数据:游标中的谓词 curname%found 、curname%notfound。
当结果集中的数据没有提取完时 %