日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Oracle中判断空游标的方法

發布時間:2025/7/14 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle中判断空游标的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

聲明:本文是在看完一個帖子,經過自己測試驗證后得出來的一些結論,如果大家有更好的解決辦法,可以留言,如有錯誤請指出。謝謝~

1、聲明包

create or replace package TAL_TEST is-- Author : ADMINISTRATOR-- Created : 2012/12/9 15:15:38-- Purpose : XXXX的測試TYPE myCursorType IS REF CURSOR;--測試空游標PROCEDURE p_testEmptyCursor;end TAL_TEST;

2、包體

create or replace package body TAL_TEST is--測試空游標PROCEDURE p_testEmptyCursorISrowRecord SJ_CD_PERIODS%ROWTYPE;myCursorFirst myCursorType ;myCursorSecond myCursorType;myCursorThird myCursorType;myCursorForth myCursorType;BEGIN --使用notfound(失敗) 數據庫中不存在限制條件下的數據集 OPEN myCursorFirst FORSELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '1001' ;IF myCursorFirst%notfound THENdbms_output.put_line('數據庫中不存在FPERIODID為1001的數據集');ELSEdbms_output.put_line('數據庫中存在FPERIODID為1001的數據庫');END IF;--使用ROWCOUNT(失敗)數據庫中存在限制條件下的數據集OPEN myCursorSecond FORSELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '20112012141202260210001003001002002';IF myCursorSecond%ROWCOUNT = 0 THEN dbms_output.put_line('數據庫中不存在FPERIODID為20112012141202260210001003001002002的數據集');ELSEdbms_output.put_line('數據庫中存在FPERIODID為20112012141202260210001003001002002的數據集');END IF;--使用FETCH(成功)數據庫中存在限制條件下的數據集OPEN myCursorThird FORSELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '20112012141202260210001003001002002';FETCH myCursorThird INTO rowRecord; IF myCursorThird%NOTFOUND THENdbms_output.put_line('數據庫中不存在FPERIODID為20112012141202260210001003001002002的數據集');ELSEdbms_output.put_line('數據庫中存在FPERIODID為20112012141202260210001003001002002的數據集');END IF;--使用FETCH(成功)數據庫中不存在限制條件下的數據集OPEN myCursorForth FORSELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '1001';FETCH myCursorForth INTO rowRecord; IF myCursorForth%NOTFOUND THENdbms_output.put_line('數據庫中不存在FPERIODID為1001的數據集');ELSEdbms_output.put_line('數據庫中存在FPERIODID為1001的數據集');END IF; END;end TAL_TEST;

3、下面對上述的測試進行說明

myCursorFirst:

--使用notfound(失敗) 數據庫中不存在限制條件下的數據集 OPEN myCursorFirst FORSELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '1001' ;IF myCursorFirst%notfound THENdbms_output.put_line('數據庫中不存在FPERIODID為1001的數據集');ELSEdbms_output.put_line('數據庫中存在FPERIODID為1001的數據庫');END IF;

在我的數據庫中是不存在編號'1001'的數據集的。但在調試代碼的時候:

程序運行不正確。

說明:其實上述的IF語句就有問題myCursorFirst%notFound肯定為Flase

myCursorSecond:

--使用ROWCOUNT(失敗)數據庫中存在限制條件下的數據集OPEN myCursorSecond FORSELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '20112012141202260210001003001002002';IF myCursorSecond%ROWCOUNT = 0 THEN dbms_output.put_line('數據庫中不存在FPERIODID為20112012141202260210001003001002002的數據集');ELSEdbms_output.put_line('數據庫中存在FPERIODID為20112012141202260210001003001002002的數據集');END IF;

在我的數據庫中是存在上述標號的數據集的。但在調試代碼的時候:

程序運行不正確。

說明:當游標不FETCH.%ROWCOUNT屬性就一直是0,所以根據這個判斷是沒有用的。一般都是先Fetch一下,執行完Fetch操作后,再利用%NOTFOUND判斷Cursor中有沒有數據。于是就有了下面的兩個測試。

myCursorThird

--使用FETCH(成功)數據庫中存在限制條件下的數據集OPEN myCursorThird FORSELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '20112012141202260210001003001002002';FETCH myCursorThird INTO rowRecord; IF myCursorThird%NOTFOUND THENdbms_output.put_line('數據庫中不存在FPERIODID為20112012141202260210001003001002002的數據集');ELSEdbms_output.put_line('數據庫中存在FPERIODID為20112012141202260210001003001002002的數據集');END IF;

我的數據庫中存在上述的數據集,程序運行的結果為:

程序運行成功。

myCursorForth:

--使用FETCH(成功)數據庫中不存在限制條件下的數據集OPEN myCursorForth FORSELECT A.* FROM SJ_CD_PERIODS A WHERE A.FPERIODID = '1001';FETCH myCursorForth INTO rowRecord; IF myCursorForth%NOTFOUND THENdbms_output.put_line('數據庫中不存在FPERIODID為1001的數據集');ELSEdbms_output.put_line('數據庫中存在FPERIODID為1001的數據集');END IF;

我的數據庫中不存在1001的數據集。程序運行的結果為:

程序運行正確。

總結:在昨晚和喜姣討論的時候,我還以為Oracle中有提供直接判斷cursor是否為空的函數,今天來在網上搜索了一下,貌似沒有。對于cursor來說,只Open,不Fetch的時候,Cursor是不會知道到底有多少數據的。當然你也可以select count(*)......

歡迎指出錯誤。

參考帖子:http://bbs.csdn.net/topics/370107459

?

?

?

?

轉載于:https://my.oschina.net/eillenme/blog/94759

總結

以上是生活随笔為你收集整理的Oracle中判断空游标的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。