游标的概念引入(隐式游标日常常用,只是一个内部的机制而已)

游标的类型有两种:隐式和显式。 PL/SQL会为所有的SQL数据操作声明一个隐式的游标,包括只返回一条记录的查询操作

其实我们在pl/sql中每作一次查询操作就用到了oracle的隐式的游标。

 

此外,我们可以显示地使用游标来处理一条查询结果的游标:

DECLARE
  CURSOR
 c1 IS
    SELECT
 empno, ename, job
      FROM emp
     WHERE deptno = 20;

 

由多行查询返回的行集合称为结果集(result set)。它的大小就是满足我们查询条件的行的个数。如下图所示,显式游标"指向"当前行的记录,这可以让我们的程序每次处理一条记录。

 

其实,游标相当于一个指针,它指向一个结果集;它在多个字段记录的保存和处理上占有

很大的优势。

 

多行查询处理有些像文件处理。例如,一个COBOL程序打开一个文件,处理记录,然后关闭文件。同样,一个PL/SQL程序打开一个游标,处理查询出来的行,然后关闭游标。就像文件指针能标记打开文件中的当前位置一样,游标能标记出结构集的当前位置。

我们可以使用OPEN,FETCH和CLOSE语句来控制游标,OPEN用于打开游标并使游标指向结果集的第一行,FETCH会检索当前行的信息并把游标指移向下一行,当最后一行也被处理完后,CLOSE就会关闭游标

 

游标FOR循环

在大多需要使用显式游标的情况下,我们都可以用一个简单的游标FOR循环来代替OPENFETCHCLOSE语句。首先,游标FOR循环会隐式地声明一个代表当前行的循环索引(loop index)变量。下一步,它会打开游标,反复从结果集中取得数据并放到循环索引的各个域(field)中。当所有行都被处理过以后,它就会关闭游标。下面的例子中,游标FOR循环隐式地声明了一个emp_rec记录:

 

DECLARE
  CURSOR
 c1 IS
    SELECT
 ename, sal, hiredate, deptno
      FROM emp;
  ...
BEGIN
  FOR
 emp_rec IN c1 LOOP
    ...
    salary_total    := salary_total + emp_rec.sal;
  END LOOP;
END;

 

为了使用每一个查询到的行中的每一个字段,我们可以使用点标志(dot notation),它的作用就像一个域选择器。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值