日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2024/7/5 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cursor用法java,Cursor的基本使用方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Cursor的基本使用方法

今天在用到Cursor的時候發(fā)現(xiàn),有很多游標(biāo)相關(guān)的知識還是有欠缺,在網(wǎng)上搜了篇基礎(chǔ)講解的文,覺得還不錯,自己整理了一下發(fā)上來。雖然很基礎(chǔ),但是有一些內(nèi)容之前確實沒有很扎實得掌握,所以記下來也可以加深一下印象。

一、Cursor的分類

二、各類Cursor舉例

----

靜態(tài)游標(biāo)

-

顯式游標(biāo)

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

;

/

----

靜態(tài)游標(biāo)

-

隱式游標(biāo)

-1.DML

begin

update

emp

set

ename=ename ;

--where 1=2;

dbms_output.put_line(

'update '

||

sql

%

rowcount

||

' records'

);

end

;

/

----

靜態(tài)游標(biāo)

-

隱式游標(biāo)

-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

;

/

----

靜態(tài)游標(biāo)

-

隱式游標(biāo)

-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

;

/

----

動態(tài)游標(biāo)

-

弱類型

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

;

/

----

動態(tài)游標(biāo)

-

強(qiáng)類型

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的區(qū)別:

1)靜態(tài)cursor不能返回到客戶端,只有PL/SQL才能利用它。refcursor能夠被返回到客戶端,這就是從Oracle的存儲過程返回結(jié)果集的方式。

2)靜態(tài)cursor可以是全局的,而refcursor則不是。

3)refcursor可以從子例程傳遞到子例程,而cursor則不能。為了共享靜態(tài)cursor,必須在包說明或包體中把它定義為全局cursor。

因為使用全局變量通常不是一種很好的編碼習(xí)慣,因此可以用refcursor來共享PL/SQL中的cursor,無需混合使用全局變量。

4)使用靜態(tài)cursor,通過靜態(tài)SQL(但不用refcursor),比使用refcursor效率高,而refcursor的使用僅限于以下幾種情況:

1.把結(jié)果集返回給客戶端;

2.在多個子例程之間共享cursor(實際上與上面提到的一點非常類似);

3.沒有其他有效的方法來達(dá)到你的目標(biāo)時,則使用refcursor,正如必須用動態(tài)SQL時那樣

----

動態(tài)游標(biāo)

-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

;

非強(qiáng)類型的Ref cursor 和sys_refcursor的區(qū)別:

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.

三、游標(biāo)屬性

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

游標(biāo)屬性:

%FOUND

:變量最后從游標(biāo)中獲取記錄的時候,在結(jié)果集中找到了記錄。

%NOTFOUND

:變量最后從游標(biāo)中獲取記錄的時候,在結(jié)果集中沒有找到記錄。

%ROWCOUNT

:當(dāng)前時刻已經(jīng)從游標(biāo)中獲取的記錄數(shù)量。

%ISOPEN

:是否打開。

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

----

靜態(tài)游標(biāo)

-

游標(biāo)屬性

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

;

/

總結(jié)

以上是生活随笔為你收集整理的cursor用法java,Cursor的基本使用方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。