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

oracle游标

发布时间:2020-12-12 13:25:47 所属栏目:百科 来源:网络整理
导读:oralce游标 ? 简介 ? Oracle创建了一个内存区域,称为上下文区域,用于处理SQL语句,该语句包含处理语句所需的所有信息; 例如,处理的行数等 游标指向这个上下文区域。PL / SQL通过游标控制上下文区域。游标保存SQL语句返回的行(一个或多个)。光标所指向的

oralce游标

?

简介

? Oracle创建了一个内存区域,称为上下文区域,用于处理SQL语句,该语句包含处理语句所需的所有信息; 例如,处理的行数等

游标指向这个上下文区域。PL / SQL通过游标控制上下文区域。游标保存SQL语句返回的行(一个或多个)。光标所指向的行称为活动行。

游标分类:

  • 隐式游标
  • 显式游标

隐式游标

? 每当执行SQL语句时,当语句没有显式游标时,Oracle会自动创建隐式游标。程序员无法控制隐式游标及其中的信息。

游标属性

  • %FOUND
  • %NOTFOUND
  • %ISOPEN
  • %ROWCOUNT

%found:

? 如果INSERT,UPDATE或DELETE语句影响一行或多行或SELECT INTO语句返回一行或多行,则返回TRUE。否则,它返回FALSE。

%notfound:

? 与%FOUND完全相反。如果INSERT,UPDATE或DELETE语句不影响任何行,或者SELECT INTO语句未返回任何行,则返回TRUE。否则,它返回FALSE。

%isopen:

? 对于隐式游标,始终返回FALSE,因为Oracle在执行其关联的SQL语句后会自动关闭SQL游标。

%rowcount:

? 返回受INSERT,UPDATE或DELETE语句影响的行数,或SELECT INTO语句返回的行数。

此外,任何SQL游标属性都将作为sql%attribute_name访问 。

eg:

declare
    total_rows number;
begin
    update emps
    set sal = sal + 500;
    if sql%notfound then
        dbms_output.put_line('no emps selected');
     elsif sql%found then
        total_rows := sql%rowcount;
        dbms_output.put_line(total_rows || 'emps selected');
     end if;
end;

显式游标

? 显式游标是程序员定义的游标,用于获得对上下文区域的更多控制。应在PL / SQL块的声明部分中定义显式游标。它是在SELECT语句上创建的,它返回多行。

创建语法:

CURSOR cursor_name IS select_statement;

使用步骤:

  • 声明游标
  • 打开游标
  • 获取游标
  • 关闭游标

声明游标

cursor c_emps is
select empno,ename from emps;

打开游标

open c_emps;

获取游标

fetch c_emps into c_empno,c_ename;

关闭光标

close c_emps;

完整eg:

declare
    c_empno emps.empno%type;
    c_ename emps.ename%type;
    cursor c_emps is
    select empno,ename from emps;
    
begin
    open c_emps;
    loop
        fetch c_emps into c_empno,c_ename;
        exit when c_emps%notfound;
        dbms_output.put_line(c_empno||c_ename);
    end loop;
end;

(编辑:李大同)

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

    推荐文章
      热点阅读