Stored procedures 调用包&x27;从另一个程序中选择一个程序

Stored procedures 调用包&x27;从另一个程序中选择一个程序,stored-procedures,plsql,oracle11g,package,Stored Procedures,Plsql,Oracle11g,Package,试图搜索,但我找不到 我有一个包名package_1,其中我有多个过程/函数。现在我想从另一个过程调用其中一个函数,这个过程不是这个包的一部分。我不能把这段代码放在那个包中(两者都在同一个模式上) 我正在尝试这个 package_1.函数_1(varchar_var_1,varchar_var_2,varchar_var_3) 但这给了我错误 问题2 上述函数返回一个对象,该对象是包中定义的记录类型。如何在过程中声明该类型的对象,以便在过程中分配响应 检查是否在包头/规范中声明。如果是你 将有权

试图搜索,但我找不到

我有一个包名
package_1
,其中我有多个过程/函数。现在我想从另一个过程调用其中一个函数,这个过程不是这个包的一部分。我不能把这段代码放在那个包中(两者都在同一个模式上)

我正在尝试这个

package_1.函数_1(varchar_var_1,varchar_var_2,varchar_var_3)

但这给了我错误

问题2 上述函数返回一个对象,该对象是包中定义的记录类型。如何在过程中声明该类型的对象,以便在过程中分配响应

  • 检查是否在包头/规范中声明。如果是你 将有权访问它
  • 函数必须返回一个值:

    a_值:=包_1.函数_1(varchar_var_1,varchar_var_2,varchar_var_3)

  • 检查包是否有效。如果它是无效的,那么就没有了 你能做的很多(直到它被修复)


  • 如果函数返回记录类型,则需要在该记录类型的调用者中声明一个局部变量。差不多

    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;
    
    创建或替换过程您的\u过程\u名称()
    作为
    记录包1.记录类型;
    ...
    开始
    ...
    l_rec:=包1.功能名称(p1、p2、p3);
    ...
    结束;
    
    当然,这假设记录类型和函数都是在包规范中定义的,因此它们是公共的,而不仅仅是在包体中定义的包的私有成员。。。我在调用一个函数,为了进行测试,我没有将它的返回值赋给任何东西,Oracle认为我正在尝试调用一个过程。