从另一个过程调用包的过程
Posted
技术标签:
【中文标题】从另一个过程调用包的过程【英文标题】:Calling package's procedure from another procedure 【发布时间】:2013-08-15 14:48:56 【问题描述】:试图搜索但我找不到它。
我有一个包名package_1
,其中我有多个过程/函数。现在我想从另一个过程中调用其中一个函数,它不是这个包的一部分。我不能把这段代码放在那个包中(两者都在同一个模式上)。
我正在尝试这个
package_1.function_1(varchar_var_1, varchar_var_2, varchar_var_3);
但它给了我错误。
问题2 上述函数返回一个对象,该对象是包中定义的记录类型。如何在我的过程中声明该类型的对象,以便我可以在我的过程中分配响应?
【问题讨论】:
哦,我修好了 :) ...我正在调用一个函数并且为了测试我没有将它的返回值分配给任何东西,Oracle 认为我正在尝试调用一个过程。跨度> 【参考方案1】:如果函数返回一个记录类型,您需要在该记录类型的调用者中声明一个局部变量。类似的东西
CREATE OR REPLACE PROCEDURE your_procedure_name( <<parameters>> )
AS
l_rec package_1.record_type;
...
BEGIN
...
l_rec := package_1.function_name( p1, p2, p3 );
...
END;
当然,这假设记录类型和函数都在包规范中定义,因此它们是公共的,而不是仅仅被定义为包的私有成员,只在包体中定义。
【讨论】:
【参考方案2】:-
检查它是否在包头/规范中声明。如果是你
将有权访问它。
函数必须返回一个值:
a_value := package_1.function_1(varchar_var_1, varchar_var_2, varchar_var_3);
检查包是否有效。如果无效则不存在 你可以做很多事情(直到它被修复)。
【讨论】:
以上是关于从另一个过程调用包的过程的主要内容,如果未能解决你的问题,请参考以下文章