ORACLE游标概念讲解

Oracle游标是管理从数据源返回数据的机制,允许逐行操作结果集。它们用于定位结果集中的特定行、检索和修改数据,提供了一种以编程方式访问数据库的方法。虽然游标效率较低,但在某些场景下难以避免。Oracle游标分为静态(隐式和显示)和动态(REF游标)类型,具有不同的状态属性和操作方式。在使用游标时,应注意避免在循环中进行表连接操作,以提高效率。此外,游标可通过参数化来适应不同查询需求,REF游标则允许动态关联结果集。
摘要由CSDN通过智能技术生成
               

1.什么是游标?

 从表中检索出结果集,从中每次指向一条记录进行交互的机制。

     用来管理从数据源返回的数据的属性(结果集)。这些属性包括并发管理、在结果集中的位置、返回的行数,以及是否能够在结果集中向前和/或向后移动(可滚动性)。

     游标跟踪结果集中的位置,并允许对结果集逐行执行多个操作,在这个过程中可能返回至原始表,也可能不返回至原始表。

    换句话说,游标从概念上讲基于数据库的表返回结果集。

游动的光标(指针),可以指向一个结果集,通过游标的移动逐行提取每一行的记录  。

 用来查询数据库,获取记录集合(结果集)的指针,可以让开发者一次访问一行结果集,在每条结果集上作操作。

用来存储多条查询数据的一种数据结构(结果集),它有一个指针,用来从上往下移动,从而达到遍历每条记录的作用。

 由于它指示结果集中的当前位置,就像计算机屏幕上的光标指示当前位置一样,“游标”由此得名。

2.游标有什么作用?

 ①指定结果集中特定行的位置。

 ②基于当前的结果集位置检索一行或连续的几行。

 ③在结果集的当前位置修改行中的数据。

 ④对其他用户所做的数据更改定义不同的敏感性级别。

 ⑤可以以编程的方式访问数据库。

程序语言是面向记录的,一组变量一次只能存放一个变量或者一条记录,无法直接接收数据库中的查询结果集引入游标就解决了这个问题

 

    

3.为什么避免使用游标?

 ①在创建游标时,最需要考虑的事情是,“是否有办法避免使用游标?”

  因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写;

  如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作。

 

4.Oracle游标的类型?

 ①静态游标:结果集已经确实(静态定义)的游标。在执行前,明确知道sql语句游标 ,分为隐式和显示游标。

 

  1.  显示游标 

    用户显示声明的游标,即指定结果集。当查询返回结果超过一行时,就需要一个显式游标。用户自己写的sql语句,编译时能明确知道sql语句 

  2. 隐式游标 

    所有DML语句(增、删、改、查询单条记录)为隐式游标,该变量名不需要用户自己声明,它由系统帮我们定义,叫sql。使用时不需要声明隐式游标,它由系统定义 .

     隐式游标的使用:通过%rowcour判断是有使用了。 

    ② 动态游标 (REF游标)

    在执行前不知道sql语句游标,执行时才知道sql语句的游标。 动态关联结果集的临时对象。

  3.  强类型游标

    规定返回类型

  4.  弱类型游标

    不规定返回类型,可以获取任何结果集。

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。

       当结果集中的数据没有提取完时 %

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值