请问如何在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”游标没在包头里面声明。
这种情况下我该如何做,才能在包体的函数/过程里面使用包体定义的游标记录类型作为参数? 展开
然后我定义了一个函数,输入参数就是该游标的某条记录,格式如下:F_do_sth_with_C (i_SingleRec C_sample%Rowtype) is number
问题来了,所有的函数都必须在包头里面声明,但是C_sample是在包里面定义的,当我在包头里面声明这句的时候,编译器报错,因为“C_sample”游标没在包头里面声明。
这种情况下我该如何做,才能在包体的函数/过程里面使用包体定义的游标记录类型作为参数? 展开
1个回答
展开全部
你的这个想法(在包体的函数/过程里面使用包体定义的游标记录类型作为参数)是不能实现的.
可以把函数F_do_sth_with_C中需要的参数在包头进行定义. 如果这个参数的类型是由包体的函数/过程动态决定的, 那么你要另想一些变通的办法.
可以把函数F_do_sth_with_C中需要的参数在包头进行定义. 如果这个参数的类型是由包体的函数/过程动态决定的, 那么你要另想一些变通的办法.
追问
请问通常有什么变通方法呢? 比如说定义一个类型,其字段与该游标记录类型完全匹配,然后弄一个专门的过程去一个一个赋值?之后就可以吧这个自定义类型作为包函数的传递参数了?
这是我想到的笨办法
追答
为什么不考虑把包体定义的游标记录类型移到包头定义?
我猜测是不是因为觉得不能在包头定义游标(因为你的游标查询语句还有一些条件需要根据包体的参数来决定), 所以才要使用包体中定义的游标记录类型. 如果是这样的话, 你可以使用游标变量: 在包头定义游标变量类型, 然后在包体实现此游标变量的查询(具体的select语句), 在函数F_do_sth_with_C中就可以使用游标变量中所定义的记录类型了.
示例(使用Oracle自带HR Schema下EMPLOYEES表):
因为字数限制, 示例代码作为附件贴上, 供参考. 如果此示例对你有些许帮助, 记得采纳一下, 谢谢!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询