oracle 游标查询为空,Oracle中判断空游标的方法-Oracle

1、声明包  www.2cto.com

01

createorreplacepackage TAL_TESTis

02

03

— Author : ADMINISTRATOR

04

— Created : 2012/12/9 15:15:38

05

— Purpose : XXXX的测试

06

07

TYPE myCursorTypeISREFCURSOR;

08

09

–测试空游标

10

PROCEDUREp_testEmptyCursor;

11

12

endTAL_TEST;

2、包体

01

createorreplacepackage body TAL_TESTis

02

03

–测试空游标

04

PROCEDUREp_testEmptyCursor

05

IS

06

rowRecord SJ_CD_PERIODS%ROWTYPE;

07

myCursorFirst myCursorType ;

08

myCursorSecond myCursorType;

09

myCursorThird myCursorType;

10

myCursorForth myCursorType;

11

BEGIN

12

–使用notfound(失败) 数据库中不存在限制条件下的数据集    www.2cto.com

13

OPENmyCursorFirstFOR

14

SELECTA.*FROMSJ_CD_PERIODS AWHEREA.FPERIODID =1001;

15

IF myCursorFirst%notfoundTHEN

16

dbms_output.put_line(数据库中不存在FPERIODID为1001的数据集);

17

ELSE

18

dbms_output.put_line(数据库中存在FPERIODID为1001的数据库);

19

ENDIF;

20

21

–使用ROWCOUNT(失败)数据库中存在限制条件下的数据集

22

OPENmyCursorSecondFOR

23

SELECTA.*FROMSJ_CD_PERIODS AWHEREA.FPERIODID =20112012141202260210001003001002002;

24

IF myCursorSecond%ROWCOUNT = 0THEN

25

dbms_output.put_line(数据库中不存在FPERIODID为20112012141202260210001003001002002的数据集);

26

ELSE

27

dbms_output.put_line(数据库中存在FPERIODID为20112012141202260210001003001002002的数据集);

28

ENDIF;

29

30

–使用FETCH(成功)数据库中存在限制条件下的数据集

31

OPENmyCursorThirdFOR

32

SELECTA.*FROMSJ_CD_PERIODS AWHEREA.FPERIODID =20112012141202260210001003001002002;

33

FETCHmyCursorThirdINTOrowRecord;

34

IF myCursorThird%NOTFOUNDTHEN

35

dbms_output.put_line(数据库中不存在FPERIODID为20112012141202260210001003001002002的数据集);

36

ELSE

37

dbms_output.put_line(数据库中存在FPERIODID为20112012141202260210001003001002002的数据集);

38

ENDIF;

39

40

–使用FETCH(成功)数据库中不存在限制条件下的数据集

41

OPENmyCursorForthFOR

42

SELECTA.*FROMSJ_CD_PERIODS AWHEREA.FPERIODID =1001;

43

FETCHmyCursorForthINTOrowRecord;

44

IF myCursorForth%NOTFOUNDTHEN

45

dbms_output.put_line(数据库中不存在FPERIODID为1001的数据集);

46

ELSE

47

dbms_output.put_line(数据库中存在FPERIODID为1001的数据集);

48

ENDIF;

49

END;

50

51

endTAL_TEST;

3、下面对上述的测试进行说明

myCursorFirst:

1

–使用notfound(失败) 数据库中不存在限制条件下的数据集

2

OPENmyCursorFirstFOR

3

SELECTA.*FROMSJ_CD_PERIODS AWHEREA.FPERIODID =1001;

4

IF myCursorFirst%notfoundTHEN

5

dbms_output.put_line(数据库中不存在FPERIODID为1001的数据集);

6

ELSE

7

dbms_output.put_line(数据库中存在FPERIODID为1001的数据库);

8

ENDIF;

在我的数据库中是不存在编号1001的数据集的。但在调试代码的时候:

ryiq2u.jpg

程序运行不正确。

说明:其实上述的IF语句就有问题myCursorFirst%notFound肯定为Flase

myCursorSecond:

1

–使用ROWCOUNT(失败)数据库中存在限制条件下的数据集

2

OPENmyCursorSecondFOR

3

SELECTA.*FROMSJ_CD_PERIODS AWHEREA.FPERIODID =20112012141202260210001003001002002;

4

IF myCursorSecond%ROWCOUNT = 0THEN

5

dbms_output.put_line(数据库中不存在FPERIODID为20112012141202260210001003001002002的数据集);

6

ELSE

7

dbms_output.put_line(数据库中存在FPERIODID为20112012141202260210001003001002002的数据集);

8

ENDIF;

在我的数据库中是存在上述标号的数据集的。但在调试代码的时候:

Jz6V7f.jpg

程序运行不正确。

说明:当游标不FETCH.%ROWCOUNT属性就一直是0,所以根据这个判断是没有用的。一般都是先Fetch一下,执行完Fetch操作后,再利用%NOTFOUND判断Cursor中有没有数据。于是就有了下面的两个测试。

myCursorThird

1

–使用FETCH(成功)数据库中存在限制条件下的数据集

2

OPENmyCursorThirdFOR

3

SELECTA.*FROMSJ_CD_PERIODS AWHEREA.FPERIODID =20112012141202260210001003001002002;

4

FETCHmyCursorThirdINTOrowRecord;

5

IF myCursorThird%NOTFOUNDTHEN

6

dbms_output.put_line(数据库中不存在FPERIODID为20112012141202260210001003001002002的数据集);

7

ELSE

8

dbms_output.put_line(数据库中存在FPERIODID为20112012141202260210001003001002002的数据集);

9

ENDIF;

我的数据库中存在上述的数据集,程序运行的结果为:

2UfUri.jpg

程序运行成功。

myCursorForth:

1

–使用FETCH(成功)数据库中不存在限制条件下的数据集

2

OPENmyCursorForthFOR

3

SELECTA.*FROMSJ_CD_PERIODS AWHEREA.FPERIODID =1001;

4

FETCHmyCursorForthINTOrowRecord;

5

IF myCursorForth%NOTFOUNDTHEN

6

dbms_output.put_line(数据库中不存在FPERIODID为1001的数据集);

7

ELSE

8

dbms_output.put_line(数据库中存在FPERIODID为1001的数据集);

9

ENDIF;

我的数据库中不存在1001的数据集。程序运行的结果为:

AFZ7vu.jpg

程序运行正确。

总结:在昨晚和喜姣讨论的时候,我还以为Oracle中有提供直接判断cursor是否为空的函数,今天来在网上搜索了一下,貌似没有。对于cursor来说,只Open,不Fetch的时候,Cursor是不会知道到底有多少数据的。当然你也可以select count(*)……

欢迎指出错误。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值