【发布时间】:2020-10-20 16:25:53
【问题描述】:
我有一个返回代码数组 (NUMBER) 的函数。
select GET_USER_OFFICE_CODES(10) FROM DUAL;
--output--
DB.OFFICE_CODES(3,4,5,6,7,8,9)
和
select GET_USER_OFFICE_CODES(2) FROM DUAL;
--output--
DB.OFFICE_CODES(1,10,14,21)
在一个函数中,我试图组合 2 个相同类型的数组。我收到一个错误“调用'MULTISET_UNION_ALL'的参数类型错误”
create or replace function COMBINE_OFFICE_CODES(
in_local_office_code NUMBER,
in_regional_office_code NUMBER
)
RETURN OFFICE_CODES
IS
local_office_codes OFFICE_CODES;
regional_office_codes OFFICE_CODES;
combined_office_codes OFFICE_CODES;
Begin
local_office_codes := GET_USER_OFFICE_CODES(in_local_office_code);
regional_office_codes := GET_USER_OFFICE_CODES(in_regional_office_code);
combined_office_codes := local_office_codes MULTISET UNION ALL regional_office_codes;
RETURN combined_office_codes;
end
【问题讨论】:
-
"Multiset" 操作符适用于多集(显然),在 Oracle 中称为“嵌套表”。它们不适用于数组(Oracle 中的 varray)。数组是一个 ORDERED 值序列;没有“数组的联合”的概念。您真的需要那里的数组,还是可以更改为嵌套表?这将是最有意义的。如果您确实需要数组,也可以对其进行排列 - 它有点复杂,您需要在 UNION 中指定您想要的顺序。 (同样,如果你的答案是“顺序无关紧要”,那么你不需要数组,你需要嵌套表)。
-
感谢您的帮助。将 TYPE 更改为 TABLE 就可以了。创建或替换类型 OFFICE_CODES 作为数字表;
标签: oracle plsql oracle-apex-5.1