首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >合并2种Oracle PL/SQL

合并2种Oracle PL/SQL
EN

Stack Overflow用户
提问于 2020-10-21 00:25:54
回答 1查看 205关注 0票数 0

我有一个返回代码数组(NUMBER)的函数。

代码语言:javascript
运行
复制
select GET_USER_OFFICE_CODES(10) FROM DUAL;
--output--
DB.OFFICE_CODES(3,4,5,6,7,8,9)

代码语言:javascript
运行
复制
select GET_USER_OFFICE_CODES(2) FROM DUAL;    
--output--
DB.OFFICE_CODES(1,10,14,21)

在一个函数中,我尝试组合两个相同类型的数组。我收到错误消息“调用‘MULTISET_UNION_ALL’时出现错误的参数类型”

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

发布于 2020-10-21 00:51:03

你可以使用UNION ALL;

代码语言:javascript
运行
复制
create type OFFICES_CODES is varray(100) of number;

declare
  local_office_codes OFFICES_CODES := OFFICES_CODES(1,2);
  regional_office_codes OFFICES_CODES := OFFICES_CODES(3,4);
  combined_office_codes OFFICES_CODES; 
Begin

  SELECT * BULK COLLECT INTO  combined_office_codes FROM  
  (select *from table(local_office_codes) 
    UNION ALL  
  select *from table(regional_office_codes));
 
 FOR i in 1..combined_office_codes.count loop
    DBMS_OUTPUT.PUT_LINE(combined_office_codes(i));
 end loop;
 
end;
/

已处理

语句。1 2 3 4

*

你也可以摆脱局部变量,直接使用函数。试试这个:

代码语言:javascript
运行
复制
create or replace type OFFICES_CODES is varray(100) of number;

create or replace function  get_office_codes (nNum number) return OFFICES_CODES
is
vRet offices_codes;
begin
    if nNum = 1 then
        vRet := offices_codes(1,4);
    else
        vRet := offices_codes(3,6);
    end if;
    return vRet;
end;
/


declare
  combined_office_codes OFFICES_CODES; 
Begin

  SELECT * BULK COLLECT INTO  combined_office_codes FROM  
  (select * from table(get_office_codes(1)) 
    UNION ALL  
  select *from table(get_office_codes(2))
  ORDER BY 1);
 
 FOR i in 1..combined_office_codes.count loop
    DBMS_OUTPUT.PUT_LINE(combined_office_codes(i));
 end loop;
 
end;
/
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64449386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档