将关联数组作为包之间的参数传递

Dav*_*Kub 2 oracle stored-procedures associative-array parameter-passing

我有两个独立的Oracle(v9.2)PL/SQL包,我试图从package1中的过程传递一个关联数组(即索引表),作为package2中过程的参数.这可能吗?我PLS-00306: wrong number or types of arguments in call to 'ROLLUP_TO_15'在编译package1时不断得到.

该数组定义为:

type list_tab is table of number(10)
  index by binary_integer;
Run Code Online (Sandbox Code Playgroud)

在两个包的规格.在package1的过程中,我正在调用第二个包,因为package2.rollup_to_15(chanList);那是我得到编译错误的行(chanList是一个类型的变量list_tab).

在package2中,过程定义为:

procedure rollup_to_15(channels in list_tab) is
Run Code Online (Sandbox Code Playgroud)

我猜我的问题是类型是在每个包中单独定义的,因为我可以将`chanList'变量传递给第一个包中的其他过程而没有任何问题.

那么,是否可以在包之间传递关联数组?如果是这样,怎么样?

戴夫

and*_*ndr 5

是的,这是可能的.

很难解释为什么没有包规范样本会收到错误,但通常将用户定义的类型作为参数传递,您应该使用定义类型DDL,或者在包规范中定义类型.

我想你想要后一个变种:)

所以这是一个例子:

create or replace package TestPackage_1
as

type TTestType is table of varchar2(1) index by varchar2(1);

end TestPackage_1;
/

create or replace package TestPackage_2
as

procedure Dummy(aParam TestPackage_1.TTestType);

end TestPackage_2;
/
Run Code Online (Sandbox Code Playgroud)

您可以TTestType在任何PL/SQL块中使用type,但不能在SQL中使用.