oracle游标的使用要注意的地方

Oracle数据库游标使用的时候,有几个地方是需要注意的。如果你在使用游标的时候报错了,找了半天没找到原因。那么这篇文章就是写给你的。

首先简单介绍一下Oracle中的游标类型有哪些:显式游标、隐式游标、REF强类型游标、REF弱类型游标。

现在来介绍一下易错的地方:

1.普通游标才能使用FOR循环

for..in循环是一种很方便遍历游标的方法,但这种循环只能用在普通游标类型,也就是只能用在显式游标、和隐式游标。原因是因为FOR循环会自动打开游标、自动关闭游标。但是REF类型游标是在打开的时候绑定需要查询的表的。也就是因为这样的冲突所以不能使用for循环来遍历REF游标。同时提醒一下,FOR循环中的游标转储变量不用声明也可以的。它的类型是%ROWTYPE类型的。有些人会错在这个细节上。

显式游标使用FOR循环遍历:


隐式游标使用FOR循环遍历:


2.REF强类型游标与弱类型游标的区别就在于有没有return 数据类型(有没有声明返回值类型),这个返回值类型必须是游标绑定的那张表的记录变量类型,也就是ROWTYPE类型。

在使用上,有时候声明了返回值反而会报错,具体怎样的错,笔者现在已经记不得了。但是如果你在使用REF游标的时候报错了,试试看删除返回值类型。反正声明不声明都是一样的。笔者那次就真的是这个问题弄了半天。

3.使用存储过程返回一个游标的时候,游标绑定的表是设计复杂的一些列子查询、连接等,总之不是原表查询。那么在调用的过程中,要注意这么几点:第一,游标转储变量不能是ROWTYPE类型的,只能是type类型的。因为查询出来的表的名称无法获取,及时起了别名,也是不行的。只能在存储过程中,写的时候,将要返回的字段一个一个列出来,调用的时候一个一个的接收。这里有一个分页查询的范例:



4.如果以上两点都没能帮你找出问题,那么还有一个很实用的方法。就是按照游标的基本语法,试着先写出各种游标的例子,或许你就会顿悟,哦,原来就是这个原因。这招不单指在这里,在很多时候没有头绪的情况下,都会很有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值