cursor用法java,Cursor的基本使用方法

Cursor的基本使用方法

今天在用到Cursor的时候发现,有很多游标相关的知识还是有欠缺,在网上搜了篇基础讲解的文,觉得还不错,自己整理了一下发上来。虽然很基础,但是有一些内容之前确实没有很扎实得掌握,所以记下来也可以加深一下印象。

一、Cursor的分类

3c5e96b6c312db5e5ff322dcede8d661.png

二、各类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

;

/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469961.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

$(document).ready()与window.onload的区别

1、执行时间&#xff1a; window.onload要等到页面所有元素加载完毕才执行&#xff0c;包括&#xff08;图片、flash等&#xff09; $(document).ready()在DOM结构绘制完毕后就执行&#xff0c;不必等到加载完毕。 2、执行个数&#xff1a; 如果有多个window.onload&#xff0c…

mongo java 日期,Java 8日期/时间(JSR-310)类型与Spring Data MongoDB的映射

我有Java 8日期/时间字段的简单文档Documentpublic class Token {private Instant createdAt;...}我希望坚持使用Spring Data MongoDB 1.5版.但java.time.Instant类型的字段无法正确反序列化,因为MappingMongoConverter缺少java.time类的转换器.在Spring 4中,我找到了带有不同转…

win7(64位)php5.5-Apache2.4-mysql5.6环境安装

win7&#xff08;64位&#xff09;安装搭建 php-5.5.10 apache2.4.7 mysql-5.6.16 环境 工具/原料 php-5.5.10-Win32-VC11-x64.zip 下载地址: http://windows.php.net/download/ httpd-2.4.7-win64-VC11.zip 下载地址: http://www.apachelounge.com/download/ mysql-5.6.16-win…

matlab中计算不等式的解,大神们,求个解多元一次不等式的代码,要所有整数解...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼用lingo做的&#xff0c;我lingo特烂328*a1470*b1300*c570*d3750*e2080*f3900*g3070*h<9000;gin(a) ;gin(b) ;gin(c) ;gin(d) ;gin(e) ;gin(f) ;gin(g) ;gin(h) ;结果&#xff1a;Feasible solution found.Infeasibilities: 0.0…

14.5.5.1 An InnoDB Deadlock Example 一个InnoDB 死锁实例

14.5.5.1 An InnoDB Deadlock Example 一个InnoDB 死锁实例下面的例子演示了一个错误可以发生当一个lock 请求会导致一个死锁,例子设计2个客户端&#xff0c;A和B:Jekins:/root# mysql -uroot -p1234567 -e"SHOW ENGINE INNODB STATUS\G;" | grep -i dead Warning: …

php开发环境 ubuntu,Ubuntu配置PHP开发环境

开发环境安装目前web服务器有很多&#xff0c;本文安装Apache服务器&#xff1b;本文使用的服务器是Mysql服务器。sudo apt install apache2常用命令重启Apache&#xff1a;sudo /etc/init.d/apache2 restart重启php&#xff1a;sudo /etc/init.d/php-fapm restart配置apache服…

Jmeter java.lang.OutOfMemoryError: GC overhead limit exceeded

使用这个jmeter工具测试时&#xff0c;遇到这么个gc错误&#xff0c;网上找到了解决方案。原因是jmeter默认分配内存的参数很小&#xff0c;好像是256M吧。故而解决方法&#xff0c;就是增加内存&#xff1a; set HEAP-Xms4g -Xmx4gset NEW-XX:NewSize1g -XX:MaxNewSize1g 注意…

php基础知识总结大全,php基础知识回顾 —— 常量

您现在的位置是&#xff1a;网站首页>>PHP>>phpphp基础知识回顾 —— 常量发布时间&#xff1a;2019-01-23 17:23:08作者&#xff1a;wangjian浏览量&#xff1a;489点赞量&#xff1a;0在PHP中有这样一类变量&#xff0c;当变量值被定义之后&#xff0c;它的值就不…

Java 配置maven及阿里云镜像

一&#xff1a;配置maven 1.下载maven&#xff0c;选择Binary tar.gz&#xff0c;解压拷贝到目录/usr/local/ https://maven.apache.org/download.cgi2.配置系统默认maven路径&#xff0c;打开配置文件 $ open ~/.bash_profile写入路径信息 export M2_HOME/usr/local/apache-ma…

php中get_featured_posts()是什么意思,WordPress的Get_Posts()函数详解

WP中获取POST有两个主要函数&#xff0c;Get_post()和Get_Posts()。一个是获取单文章&#xff0c;另外一个是获取多文章&#xff0c;其中&#xff0c;官网对Get_posts()函数的描述很简单。但有的时候描述越简单的函数&#xff0c;使用起来却并没有那么简单。下面我通过一个案例…

Android Studio 下使用git -- 个人,本地版本控制

第一步&#xff1a;下载安装git 下载地址 : https://git-scm.com/downloads 第二步&#xff1a;Android Studio 下配置git路径。 配置之后&#xff0c;Test弹出如下成功的提示即可。 第三步&#xff1a;创建版本库 选择项目的根目录比较适合。 第四步&#xff1a;添加需要版本控…

vba中取小数点后两位数,如何快速提取Excel小数点后第N位数字,excle提取小数的个位数...

excel vba中如何获取一个小数的小数点后的位数?用函数行不&#xff1f;FIND RIGHT等函数EXCEL提取小数点&#xff0c;后第一位函数RIGHT(INT(A1*10))EXCEL 函数 分别提取小数后两位right()EXCEL 一组数据里如何将十位数、个位数和小数点提取出来利用MOD函数即可。如下图&#…

oracle数据库延迟执行,如何诊断oracle数据库运行缓慢或hang住的问题

为了诊断oracle运行缓慢的问题首先要决定收集哪些诊断信息,可以采取下面的诊断方法:1.数据库运行缓慢这个问题是常见还是在特定时间出现如果数据库运行缓慢是一个常见的问题那么可以在问题出现的时候收集这个时期的awr或者statspack报告(通常收集时间间隔是一个小时).生成awr报…

The Everyman's Guide to How Network Packets Are Routed Across the Web

转自&#xff1a; http://null-byte.wonderhowto.com/how-to/hacker-fundamentals-everymans-guide-network-packets-are-routed-across-web-0134491/ We already covered how your data travels the OSI model, layer by layer, and talks with other machines on your local …

oracle忽略除数为0,ora-01476除数为0的解决办法,oracle中decode()的使用

执行报表查询&#xff0c;固定的一个时间点没有数据&#xff0c;应该是有数据的&#xff0c;把前一个时间节点往前调是有的&#xff0c;往后调也有bebug报错把sql放到数据库中&#xff0c;发现提示如截图解决办法&#xff0c;oracle中的decode()select decode(b,0,0,a/b*100) …

Confluent Platform 3.0支持使用Kafka Streams实现实时的数据处理(最新版已经是3.1了,支持kafka0.10了)...

来自 Confluent 的 Confluent Platform 3.0 消息系统支持使用 Kafka Streams 实现实时的数据处理&#xff0c;这家公司也是在背后支撑 Apache Kafka 消息框架的公司&#xff0c;它近日宣布 最新的开源平台已经达到了通用发布&#xff08;general availability&#xff09;版本。…

oracle串连接,Oracle中串连接符||的使用心得(个人见解)

Oracle中可以用串连接符||将若干个串连在一起(Oracle中也可以使用concat函数&#xff0c;但是它只最多连接两个串。而MySQL中concat可以连接多个串。在SQL Server中则使用进行串连接)。当然&#xff0c;这两个串可以是列名或字面值。例如&#xff1a;select province || city f…

HDU5971【瞎搞】

题意&#xff1a;略&#xff08;忙着准备文化课。。。明天期中考啊。。。。 思路&#xff1a; 正解就是染色&#xff0c;2-sat搞&#xff1b; AC代码&#xff08;虽然是错误的。。。数据水&#xff08;过踏马的也行啊&#xff0c;起码打脸他啊&#xff01;&#xff09; 4 3 1 0…

性能测试oracle瓶颈定位,性能测试中如何定位性能瓶颈

性能测试的概念是什么&#xff0c;基本目的是什么&#xff0c;我想大家都基本清楚&#xff0c;不作详述&#xff0c;总之&#xff0c;性能测试只是测试过程中的一种方式&#xff0c;帮助我们的功能更好的运行&#xff0c;如果功能测试是可用&#xff0c;易用&#xff0c;满足需…

Java GridBagLayout 简单使用

这里只介绍了很基础布局构建及使用&#xff0c;主要是关于 GridBagLayout. 首先整套流程大概是&#xff0c; 声明一个 GridBagLayout 对象 private GridBagLayout gridBagLayoutFrame new GridBagLayout(); 然后把当前类的容器布局管理器设置为 GridBagLayout this.setLayout(…