一、Cursor的分类

二、各类Cursor举例

----

静态游标

-

显式游标

set

serveroutput

on

declare

cursor

emp_sor(emp_deptno

in

number

)

is

select

*

from

emp

where

deptno=emp_deptno ;

emp_i emp%

rowtype

;

begin

dbms_output.put_line(

'Getting emp from deptno 10'

);

open

emp_sor(

10

);

loop

fetch

emp_sor

into

emp_i;

exit

when

emp_sor%

notfound

;

dbms_output.put_line(

'Employee id '

||emp_i.empno||

' is:'

);

dbms_output.put_line(emp_i.ename);

end

loop

;

close

emp_sor;

end

;

/

----

静态游标

-

隐式游标

-1.DML

begin

update

emp

set

ename=ename ;

--where 1=2;

dbms_output.put_line(

'update '

||

sql

%

rowcount

||

' records'

);

end

;

/

----

静态游标

-

隐式游标

-2.loop for

begin

for

r_sor

in

(

select

empno,ename

from

emp)

loop

dbms_output.put_line(r_sor.empno ||

' : '

|| r_sor.ename);

end

loop

;

end

;

/

----

静态游标

-

隐式游标

-3.select into

declare

v

varchar2

(

20

);

begin

select

ename

into

v

from

emp

where

rownum =

1

;

dbms_output.put_line(v);

dbms_output.put_line(

sql

%

rowcount

);

end

;

/

----

动态游标

-

弱类型

Declare

type

rc

is

ref

cursor

;

cursor

c

is

select

*

from

dual;

l_cursor rc;

begin

if

(to_char(

sysdate

,

'dd'

) =

30

)

then

open

l_cursor

for

'select * from emp'

;-- ref cursor with dynamic sql

elsif

(to_char(

sysdate

,

'dd'

) =

29

)

then

open

l_cursor

for

select

*

from

dept;-- ref cursor with static sql

else

open

l_cursor

for

select

*

from

dual;-- with ref cursor with static sql

end

if

;

open

c;-- the "normal" static cursor

end

;

/

----

动态游标

-

强类型

declare

type

emp_job

is

record

(empno

number

,

ename

varchar2

(

20

),

job

varchar2

(

30

)

);

type

emp_refcur

is

ref

cursor

return

emp_job;

--

声明

REF CURSOR

emp_sor emp_refcur;

emp_iemp_job;

begin

open

emp_sor

for

select

empno,ename,job

from

emp

where

rownum <

10

order

by

1

;

loop

fetch

emp_sor

into

emp_i;

exit

when

emp_sor%

notfound

;

dbms_output.put_line(emp_i.ename ||

'''s job is :'

);

dbms_output.put_line(emp_i.job);

end

loop

;

close

emp_sor;

end

;

/

普通cursor与REF cursor的区别:

1)静态cursor不能返回到客户端,只有PL/SQL才能利用它。refcursor能够被返回到客户端,这就是从Oracle的存储过程返回结果集的方式。

2)静态cursor可以是全局的,而refcursor则不是。

3)refcursor可以从子例程传递到子例程,而cursor则不能。为了共享静态cursor,必须在包说明或包体中把它定义为全局cursor。

因为使用全局变量通常不是一种很好的编码习惯,因此可以用refcursor来共享PL/SQL中的cursor,无需混合使用全局变量。

4)使用静态cursor,通过静态SQL(但不用refcursor),比使用refcursor效率高,而refcursor的使用仅限于以下几种情况:

1.把结果集返回给客户端;

2.在多个子例程之间共享cursor(实际上与上面提到的一点非常类似);

3.没有其他有效的方法来达到你的目标时,则使用refcursor,正如必须用动态SQL时那样

----

动态游标

-sys_refcursor

DECLARE

TYPE

mytable

IS

TABLE

OF

emp%

ROWTYPE

;

l_data mytable;

l_refc

sys_refcursor

;

BEGIN

OPEN

l_refc

FOR

SELECT

empno,ename,job,mgr,hiredate,sal,comm,deptno

FROM

emp;

FETCH

l_refc

BULK

COLLECT

INTO

l_data;

CLOSE

l_refc;

FOR

i

IN

1

.. l_data.COUNT

LOOP

DBMS_OUTPUT.put_line ( l_data(i).ename ||

' was hired since '

|| l_data (i).hiredate );

END

LOOP

;

END

;

非强类型的Ref cursor 和sys_refcursor的区别:

A REF CURSOR that does not specify the return type such as SYS_REFCURSOR. Meaning the SYS_REFCURSOR can be opened for a dynamic SQL query, where as simple REF CURSOR can not be opened for a query dynamically built at execution time.

三、游标属性

/*************************************************************

游标属性:

%FOUND

:变量最后从游标中获取记录的时候,在结果集中找到了记录。

%NOTFOUND

:变量最后从游标中获取记录的时候,在结果集中没有找到记录。

%ROWCOUNT

:当前时刻已经从游标中获取的记录数量。

%ISOPEN

:是否打开。

**************************************************************/

----

静态游标

-

游标属性

Declare

Cursor

emp_sor

is

Select

*

from

emp

where

rownum<

6

order

by

1

;

emp_i emp%

rowtype

;

num

number

:=

1

;

Begin

Open

emp_sor;

Fetch

emp_sor

into

emp_i;

Loop

If

emp_sor%

found

then

Dbms_output.put_line(

'Looping over record '

||num||

' of '

|| emp_sor%

rowcount

);

Fetch

emp_sor

into

emp_i;

num := num +

1

;

Elsif

emp_sor%

notfound

then

Exit

;

---exit loop, not IF

End

if

;

End

loop

;

If

emp_sor%

isopen

then

Close

emp_sor;

End

if

;

End

;

/

java cursor_cursor的基本使用方法相关推荐

  1. eclipse java调用c 代码吗_linux下通过eclipse开发用java调用c程序的方法

    linux下通过eclipse开发用java调用c程序的方法: 1.先建立好java工程并建立java文件如下: public class testso {     static {         ...

  2. java类的注释模板_IDEA添加Java类注释模版的方法

    本文介绍了idea添加java类注释模版的方法,分享给大家,具体如下: idea版本:intellij idea 2017.2.5 x64 eclipse能在类上方输入/**,回车添加类注释模版,但i ...

  3. cloning java_深入浅出Java中的clone克隆方法,写得太棒了!

    作者:张纪刚 blog.csdn.net/zhangjg_blog/article/details/18369201/ 2019-03-24 10:33:04 Java中对象的创建 clone 顾名思 ...

  4. java如何用c 的方法_JAVA如何调用C/C++方法

    JAVA以其跨平台的特性深受人们喜爱,而又正由于它的跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能.解决JAVA对本地操作的一种方法就是JNI. JAVA通过JNI调用本地方法, ...

  5. java多线程中的join方法详解

    java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...

  6. Java高级特性:clone()方法

    标签:ringbuf   his   硬件   throws   port   protect   序列化   ext   this 目录 源码 深拷贝和浅拷贝 对象串行化实现拷贝 常见面试题 源码 ...

  7. https Java SSLException protocol_version的问题解决方法

    https Java SSLException protocol_version的问题解决方法 参考文章: (1)https Java SSLException protocol_version的问题 ...

  8. Java报异常时getMessage()方法返回null

    Java报异常时getMessage()方法返回null 参考文章: (1)Java报异常时getMessage()方法返回null (2)https://www.cnblogs.com/runnin ...

  9. pom.xml错误:org.codehaus.plexus.archiver.jar.Manifest.write(java.io.PrintWriter)的解决方法

    pom.xml错误:org.codehaus.plexus.archiver.jar.Manifest.write(java.io.PrintWriter)的解决方法 参考文章: (1)pom.xml ...

  10. java sort reverse_Java ArrayList sort() 方法

    sort() 方法根据指定的顺序对动态数组中的元素进行排序. 语法 sort() 方法的语法为: arraylist.sort(Comparator c) 注:arraylist 是 ArrayLis ...

最新文章

  1. opengl版本发展史及各种概念的厘清
  2. OVS vswitchd启动(三十七)
  3. 神策数据:从产品与运营视角,了解教育行业转介绍
  4. 百叶窗设计原理 html5,Html5百叶窗效果的示例代码_html5教程技巧
  5. 作为前阿里人,来扒一扒中台皇帝的外衣!
  6. 怎么成为日上会员直邮_手把手教你玩转各大免税店直邮方法,再也不用担心真假代购...
  7. date_default_timezone_set()问题解决方案(PHP5.3以上的)
  8. 【报告分享】新零售专题报告:从直播电商的春秋战国,看mcn的进阶之道.pdf
  9. c++字符串相等比较 char* char[] string
  10. [译]Java 设计模式之组合
  11. python实现类似于visio_Visio类似的高性价比的替代软件
  12. 联想万全r520服务器安装系统,联想(lenovo)万全R520服务器图解
  13. ESP32开发环境的搭建和 ESP-IDF支持以下调试方法
  14. 工作用什么企业邮箱比较正式?常用的商务企业邮箱有哪些?
  15. 图论问题建模讨论汇总
  16. 蓝桥ROS云课→一键配置←f1tenth和PID绕圈
  17. 国科大学习资料--模式识别与机器学习(黄庆明)--2017期末考试题(含答案)
  18. 陈剑高分指南2019_完整的ECMAScript 2015-2019指南
  19. 《UNIX编程艺术》读书笔记
  20. 《看漫画学Python》1、2版分享,python最佳入门教程,中学生用业余时间都能学会,北大教授看完都这样定义它

热门文章

  1. navicat 导入dmp文件
  2. Mach-O入门理解
  3. 【团队绩效考核方案】命劫开发
  4. swoole php配置文件,EasySwoole分离配置文件
  5. 螳螂有6条腿C语言,一只蜈蚣40只脚,一只螳螂有6只脚,现有蜈蚣和螳螂共35只,合计脚822只,蜈蚣和螳螂各多少只?...
  6. NC 一些常用方法总结
  7. w7计算机文件夹打开怎么设置密码,win7电脑文件夹怎么设置密码
  8. IMO模型编程思维法(Input-Model-Output)
  9. 计算机专业买啥样笔记本,高考结束,想学计算机专业,买台啥样的笔记本比较好,暑假自学c和cpp...
  10. linux下如何模拟按键输入和模拟鼠标