请问如何在oracle 的package 包里面声明和使用带游标记录类型的函数?

比如说我在包体里面定义了一个游标C_sample,用于提取一系列的数据。然后我定义了一个函数,输入参数就是该游标的某条记录,格式如下:F_do_sth_with_C(i_... 比如说我在包体里面定义了一个游标 C_sample,用于提取一系列的数据。
然后我定义了一个函数,输入参数就是该游标的某条记录,格式如下:F_do_sth_with_C (i_SingleRec C_sample%Rowtype) is number
问题来了,所有的函数都必须在包头里面声明,但是C_sample是在包里面定义的,当我在包头里面声明这句的时候,编译器报错,因为“C_sample”游标没在包头里面声明。
这种情况下我该如何做,才能在包体的函数/过程里面使用包体定义的游标记录类型作为参数?
展开
 我来答
Andy_Sun321
2014-07-21 · TA获得超过1376个赞
知道小有建树答主
回答量:811
采纳率:89%
帮助的人:724万
展开全部
你的这个想法(在包体的函数/过程里面使用包体定义的游标记录类型作为参数)是不能实现的.
可以把函数F_do_sth_with_C中需要的参数在包头进行定义. 如果这个参数的类型是由包体的函数/过程动态决定的, 那么你要另想一些变通的办法.
追问
请问通常有什么变通方法呢? 比如说定义一个类型,其字段与该游标记录类型完全匹配,然后弄一个专门的过程去一个一个赋值?之后就可以吧这个自定义类型作为包函数的传递参数了?

这是我想到的笨办法
追答

为什么不考虑把包体定义的游标记录类型移到包头定义?

我猜测是不是因为觉得不能在包头定义游标(因为你的游标查询语句还有一些条件需要根据包体的参数来决定), 所以才要使用包体中定义的游标记录类型. 如果是这样的话, 你可以使用游标变量: 在包头定义游标变量类型, 然后在包体实现此游标变量的查询(具体的select语句), 在函数F_do_sth_with_C中就可以使用游标变量中所定义的记录类型了.

示例(使用Oracle自带HR Schema下EMPLOYEES表):

因为字数限制, 示例代码作为附件贴上, 供参考. 如果此示例对你有些许帮助, 记得采纳一下, 谢谢!

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式