知识大全 ORACLEPLSQL游标学习

Posted 变量

篇首语:知识是到达天堂的翅膀。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ORACLEPLSQL游标学习相关的知识,希望对你有一定的参考价值。

ORACLEPLSQL游标学习  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  游标

  游标是指向上下文区域的句柄或指针

  上下文区域 用于SQL处理的内存区

  上下文区域的内容

  语句处理的行数

  指向语句的语法分析表示的指针

  游标的类型

   静态游标

  隐式游标

  显示游标

   REF游标(动态游标)

  一 隐式游标

  有ORACLE在内部声明

  用于处理

  DML语句

  返回单行的查询

  游标属性

   %NOTFOUND 对数据操作成功返回FALSE 否则返回TRUE

   %FOUND  对数据操作成功返回TRUE 否则返回FALSE

   %ROWCOUNT  游标影响的行数

   %ISOPEN   游标是否打开

  begin

  insert into cities values( aaa bbb );

  DBMS_OUTPUT PUT_LINE( 游标所影响的行数 ||SQL%ROWCOUNT);

  if SQL%NOTFOUND then

  DBMS_OUTPUT PUT_LINE( NOTFOUND为真 );

  else

  DBMS_OUTPUT PUT_LINE( NOTFOUND为假 );

  end if;

  if SQL%FOUND then

  DBMS_OUTPUT PUT_LINE( FOUND为真 );

  else

  DBMS_OUTPUT PUT_LINE( FOUND为假 );

  end if;

  if SQL%ISOPEN then

  DBMS_OUTPUT PUT_LINE( ISOPEN为真 );

  else

  DBMS_OUTPUT PUT_LINE( ISOPEN为假 );

  end if;

  end;

  输出结果为

  游标所影响的行数

  NOTFOUND为假

  FOUND为真

  ISOPEN为假

  declare

  icount int := ;

  begin

  insert into cities values ( aaa bbb );

  if SQL%NOTFOUND then

  DBMS_OUTPUT PUT_LINE( 没有插入成功 );

  else

  DBMS_OUTPUT PUT_LINE( 插入成功 );

  end if;

  mit;

  end;

  输出结果为

  插入成功

  declare

  icount int := ;

  begin

  update cities set country= aaaa ;

  if SQL%NOTFOUND then

  DBMS_OUTPUT PUT_LINE( 没有更新成功 );

  else

  DBMS_OUTPUT PUT_LINE( 更新成功 );

  end if;

  mit;

  end;

  输出结果为

  更新成功

  二 显式游标

  由用户显式声明

  游标将指向活动集中的当前行

  控制显示游标

  Open

  Fetch

  Close

  declare

  cursor empCur is select * from emp;

  emprow emp%ROWTYPE;

  begin

  open empCur;

  fetch empCur into emprow;

  DBMS_OUTPUT put_line(emprow empno||   ||emprow ename);

  close empCur;

  end;

  输出结果

     SMITH

  loop循环

  declare

  cursor empCur is select * from emp;

  emprow emp%ROWTYPE;

  begin

  open empCur;

  loop

  fetch empCur into emprow;

  DBMS_OUTPUT put_line(emprow empno||   ||emprow ename);

  DBMS_OUTPUT put_line( 提取了 ||empCur%ROWCOUNT|| 行 );

   exit when empCur%NOTFOUND;

  if empCur%NOTFOUND then

  exit ;

  end if;

  end loop;

  close empCur;

  end;

  while循环

  declare

  cursor empCur is select * from emp;

  emprow emp%ROWTYPE;

  begin

  open empCur;

  fetch empCur into emprow;

  while empCur%FOUND loop

  DBMS_OUTPUT put_line(emprow empno||   ||emprow ename);

  DBMS_OUTPUT put_line( 提取了 ||empCur%ROWCOUNT|| 行 );

  fetch empCur into emprow;

  end loop;

  close empCur;

  end;

  输出结果

     SMITH

  提取了 行

     ALLEN

  提取了 行

     WARD

  提取了 行

     JONES

  提取了 行

     MARTIN

  提取了 行

     BLAKE

  提取了 行

     CLARK

  提取了 行

     SCOTT

  提取了 行

     KING

  提取了 行

     TURNER

  提取了 行

     ADAMS

  提取了 行

     JAMES

  提取了 行

     FORD

  提取了 行

     MILLER

  提取了 行

     MILLER

  提取了 行

  for循环

  循环游标

  显式游标的替代方法

  它的工作原理是什么

  隐式打开游标

  自动从活动集获取行

  在处理完所有行时关闭游标

  优点

  简化代码的编写

  declare

  cursor empCur is select * from emp where sal>&intputsal; 绑定变量

  iCount int ;

  begin

  iCount := &Count;

  DBMS_output put_line(iCount);

  for emprow in empCur loop

  DBMS_OUTPUT put_line(emprow empno||   ||emprow ename);

  DBMS_OUTPUT put_line( 提取了 ||empCur%ROWCOUNT|| 行 );

  end loop;

  end;

  三 REF游标

  在运行时使用不同的语句与之关联

  REF游标使用游标变量

  游标变量

  一种引用类型

  可以在运行时指向不同的存储位置

  Close 语句关闭游标并释放用于查询的资源

  游标变量的类型

  具有约束的游标变量

  具有返回类型的游标变量

  也称为 强游标

  无约束的游标变量

  没有返回类型的游标变量

  也称为 弱游标

  declare

  type RefEmpcur is ref cursor return emp%ROWTYPE;

  Empcur RefEmpcur;

  Emprow emp%ROWTYPE;

  flag int := ;

  begin

  flag := &flag;

  if flag= then

  OPEN Empcur for select * from emp where sal> and sal< ;

  elsif flag= then

  OPEN Empcur for select * from emp where sal>= ;

  else

  OPEN Empcur for select * from emp;

  end if;

  loop

  fetch Empcur into Emprow;

  DBMS_OUTPUT PUT_LINE(Emprow empno);

  exit when Empcur%NOTFOUND;

  end loop;

  close Empcur;

  end;

  游标变量的限制

  不能在程序包中声明游标变量

  远程子程序不能接受游标变量的值

  不能使用比较操作符对游标变量进行相等或不相等测试

  不能将空值赋予游标变量

cha138/Article/program/Oracle/201311/18224

相关参考

知识大全 oracle中的游标使用静态游标

  游标是构建在PL/SQL中用来查询数据获取记录集的指针它让开发者一次访问结果集中一行记录  在oracle中提供了两种游标静态游标ref游标  静态游标静态游标是在编译的时候就被确定然后把结果集复

知识大全 oraclePL/SQL之隐式游标和ref游标总结

oraclePL/SQL之隐式游标和ref游标总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 Oracle 游标使用总结

Oracle游标使用总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Oracle游标分为显示游标

如何用游标卡尺测量接触线磨耗?

  使用游标卡尺测量接触线磨耗时,其方法及步骤如下:  (1)用游标卡尺的外径卡脚卡紧接触线。  (2)读出游标卡尺的指示数据并记录。  ①先看副尺零线在主尺上错过几个格,读出整数A。如:副尺在主尺上

如何用游标卡尺测量接触线磨耗?

  使用游标卡尺测量接触线磨耗时,其方法及步骤如下:  (1)用游标卡尺的外径卡脚卡紧接触线。  (2)读出游标卡尺的指示数据并记录。  ①先看副尺零线在主尺上错过几个格,读出整数A。如:副尺在主尺上

知识大全 oracle游标

  为了处理SQL语句Oracle将在内存中分配一个区域这就是上下文区这个区包含了已经处理完的行数指向被分析语句的指针整个区是查询语句返回的数据行集游标就是指向上下文区句柄或指针  两种游标  一显示

知识大全 Oracle游标使用总结

Oracle游标使用总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle游标分为显示

知识大全 显式游标范围大小和复杂间隔的相关问题介绍

  我们的技术专家回答关于游标范围(extent)和间隔的问题  是不是从Oracle第版以后的版本隐式游标得到了优化不会两次取数据?还有为什么当表T在列X上有一个索引时下面的隐式游标比显式游标运行得

知识大全 Oracle数据库游标的类型

Oracle数据库游标的类型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  游标是SQL的一个内

知识大全 快速掌握Oracle数据库游标的使用方法

快速掌握Oracle数据库游标的使用方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  显式游标