加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle 游标

发布时间:2020-12-12 13:21:19 所属栏目:百科 来源:网络整理
导读:一、 游标又称光标,是SQL 的的一个内存工作区,由系统或用户以变量的形式定义,主要用于暂时存放受SQL语句影响到的所有数据。换句话说,数据库会将受SQL影响的数据暂时存放到一个内存区域的虚表中, 这个虚表就是游标 。 游标有两种类型:隐式游标和显式游

一、
  游标又称光标,是SQL 的的一个内存工作区,由系统或用户以变量的形式定义,主要用于暂时存放受SQL语句影响到的所有数据。换句话说,数据库会将受SQL影响的数据暂时存放到一个内存区域的虚表中,这个虚表就是游标
  游标有两种类型:隐式游标和显式游标。
  隐式游标:单行 select...into... 语句以及对数据库的 DML 操作都会自动创建隐式游标,用于暂时保存操作结果。简单地讲,凡是能够回滚的操作都会创建隐式游标
  显式游标:一个显示游标对应一个返回结果为多行多列的 SELECT 语句,类似于 Java 语法中的ResultSet 对象。如果要提取多行数据,就需要自定义一个显示游标,并用右边保存待提取的多行数据,最后再逐行处理。
?  游标的属性:
? ? ? ? ? ? ? ? ? ? ?%rowcount  受 SQL 影响的行数,即游标中包含的行数
? ? ? ? ? ? ? ? ? ? ?%found    ?布尔值,游标中是否还有数据
? ? ? ? ? ? ? ? ? ? ?%notfound  ? ?布尔值,游标中是否已无数据
? ? ? ? ? ? ? ? ? ? ?%isopen    游标是否打开

二、
  以下代码定义了一个游标 cemp,用于保存所有员工的 first_name 和 salary 值,然后再通过循环语句取出游标 cemp 中的每行记录并打印。

declare
    cursor cemp                  --游标 cemp 没有定义参数。
    is select first_name,salary
    from employees;
    pename employees.first_name%type;
    psal employees.salary%type;
begin
    open cemp;
    loop
      -- 依次取出每条记录
      fetch cemp into pename,psal;
      -- 退出条件:没有提取到记录
      exit when cemp%notfound;
      dbms_output.put_line(pename||的薪水是||psal);
    end loop;
    close cemp;
end;

注意】:
①函数 dbms_output.put_line() 是输出函数。在sql 窗口的调用方式为:
begin
  dbms_output.put_line();
end;
②函数 loop...end loop ; 是循环函数。

三、
1.声明游标
在可执行部分,按以下格式声明游标;

CURSOR cname[(参数1 数据类型1,参数2 数据类型2,...)]
IS SELECT 语句;

2.打开游标
在可执行部分,按以下格式打开游标;

OPEN cname[(实际参数1,实际参数2,...)];

3.提取数据
在可执行部分,按以下格式将游标工作区中的数据提取到变量中;

FETCH cname INTO 变量名1[,变量名2,...];

4.关闭游标
游标使用完毕后,就需要执行关闭的命令,代码如下:

CLOSE cname;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读