• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
wjshan0808

Learn from yesterday, Live for today, For a better tomorrow.
 ————wjshan0808

博客园    首页    新随笔    联系   管理    订阅  订阅

游标

游标:游动的光标。游标是映射在结果集中一行数据上的位置实体,有了游标,用户就可以访问结果集中的任意一行数据了。将游标放置到某行后,即可对该行数据进行操作,最常见的操作是提取当前行数据。

游标分两种:显式游标, 隐式游标

         隐式游标 :  不需要声明,使用时也不需要执行打开和关闭操作。实际上,就是在Select语句中增加了INTO子句,把结果集自动读取到指定的变量中。

  FI : 使用SELECT语句声明隐式游标,从Students表中读取Sname字段的值到变量BugsBug:

      显式游标:显式游标需要声明,在使用之前需要打开游标,使用完成后要关闭游标。使用显式游标的步骤包括:
                        (1)声明游标。
                        (2)打开游标。
                        (3)读取数据。
                        (4)关闭游标。

 

声明游标语句CURSOR

  DECLARE CURSOR <游标名>
  [ (<参数列表>) ]
  IS
  <SELECT语句>;

FI : 声明一个游标BugsBug,读取指定类型的用户信息:

为什么出错因为这只是程序的一部分而已....

打开游标语句OPEN:
  OPEN <游标名> [ (<参数列表>) ];

FI :open BugsBug(1);

游标取值语句FETCH。游标取值语句FETCH的基本语法结构如下:
  FETCH <游标名> INTO <变量列表>;

FI :fetch BugsBug into 声明列表变量“,”分割

关闭游标语句CLOSE:
  CLOSE <游标名>;

FI : close BugsBug;

 

游标属性

  %ISOPEN属性 判断游标是否被打开,如果打开,则%ISOPEN等于TRUE,否则等于FALSE。

%FOUND属性和%NOTFOUND属性
%FOUND属性用来判断游标所在的行是否有效,如果有效,返回TRUE,无效时返回FALSE。

%ROWCOUNT属性 返回到当前位置为止游标读取的记录行数。

 

游标FOR循环

    游标FOR循环是显式游标的一种快捷使用方式,它使用FOR循环依次读取结果集中的行数据。
当FOR循环开始时,游标被自动打开(不再需要OPEN语句);
每循环一次,系统自动读取游标当前行的数据(不需要使用FETCH语句);
当退出循环时,游标自动关闭(不需要使用CLOSE语句)。

游标FOR循环通常与PL/SQL记录一起使用。
PL/SQL记录(RECORD)是由一组数据构成的逻辑单元,并不保存在数据库中,与变量一样,保存在内存空间中。
使用记录时,需要先定义记录的结构,然后声明记录变量。
定义记录类型的基本语法如下:
   TYPE  <记录类型名>  IS RECORD   (字段声明  [,字段声明] …);
定义记录变量的方法与定义普通变量的方法相同,语法如下:
 <记录变量名>   <记录变量类型>

 

FI :声明记录类型TBugsBug和定义记录变量BugsBug:

 

典型游标FOR循环需要先对游标进行声明,然后才可以使用。典型游标FOR循环的语法说明如下:
   FOR <记录名> IN <游标名> LOOP
      语句1;
      语句2;
      …
      语句n;
   END LOOP;

带子查询的典型游标FOR循环的语法说明如下:
   FOR <记录名> IN <SELECT子查询> LOOP
      语句1;
      语句2;
      …
      语句n;
   END LOOP;

 


posted @ 2013-06-17 16:33  wjshan0808  阅读(413)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3