首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Oracle 11g中创建嵌套关联数组

在Oracle 11g中创建嵌套关联数组
EN

Stack Overflow用户
提问于 2016-11-30 05:59:52
回答 2查看 1.2K关注 0票数 1

我在Oracle中定义了关联数组,如下所示

代码语言:javascript
复制
CREATE OR REPLACE TYPE outlier AS OBJECT (
 ACCOUNT_ID  varchar2(100),
   INC_MONTH date,
    ); 

create or replace type outlier_acc_tab as table of outlier ;

CREATE OR REPLACE TYPE outlier_detail_rec AS OBJECT (

 NAME varchar2(100),
 OUTLIER_ACCOUNT_LIST outlier_acc_tab

);

create or replace type outlier_detail_tab as table of outlier_detail_rec;

目前,我在所有OUTLIER_ACCOUNT_LIST数组中都得到了重复的名称。相反,我希望为单个名称分组多个帐户详细信息。请告诉我应该如何修改数组的定义。谢谢你的帮助。

我正在寻找这样的输出

代码语言:javascript
复制
"OUTLIER_LIST":    [
        {
     "NAME": "A",
     "OUTLIER_ACCOUNT_LIST":          [{
        "ACCOUNT_ID": "361",
        "INC_MONTH ": 1475208000000

     }
  }, 
             {
        "ACCOUNT_ID": "362",
        "INC_MONTH": 1475208000000,

     }
  }
             ]
]
}

我在包中的select语句是

代码语言:javascript
复制
  SELECT outlier_detail_rec (
          NAME   => NAME,
     outlier_acc_tab (
            outlier_acc_rec(
               ACCOUNT_ID                   => ACCOUNT_ID,
               INC_MONTH         =>  INC_MONTH

) ))
    BULK COLLECT INTO v_outlier_array
    FROM outlier_Sel;
EN

回答 2

Stack Overflow用户

发布于 2016-11-30 06:38:55

您所拥有的不是oracle Associative Arrays,而是oracle Nested Tables。但是,大容量收集不适用于关联数组,但适用于嵌套表。

outlier_account_lists的关联数组为:

代码语言:javascript
复制
TYPE outlier_detail_aa AS TABLE OF outlier_acc_tab INDEX BY VARCHAR2(100);

要加载这样的AA,您需要执行以下操作:

代码语言:javascript
复制
declare
  type outlier_detail_aa as table of outlier_acc_tab index by varchar2(100)
  outlier_detail outlier_detail_aa;
begin
  for r in (select distinct name from outlier_sel)
  loop
    select outliser_acc_rec(account_id, inc_month)
      bulk collect into outlier_detail(r.name)
      from outlier_sel
     where name = r.name;
  end loop;
end;
票数 1
EN

Stack Overflow用户

发布于 2018-01-03 15:29:14

“批量收集不适用于关联数组”这句话是错误的。Bulk collect into还适用于关联数组。

代码语言:javascript
复制
type units_rec is record(...)
type unit_tab is table of units_rec index by binary_integer; -- <--associative array
volume_units unit_tab;

select distinct some columns
bulk collect into wul_units
from <table>;

但它不适用于嵌套的辅助数组。在本例中,您将需要使用游标循环“手动”填充数组。我从来没有使用过对象(只有记录),所以我不知道确切的语法。但它应该看起来像

->通过二进制整数创建关联数组索引,其中索引将是帐户id

->为outlier_list创建一条记录,其中一列是上面创建的数组类型,然后从该记录创建一个关联数组(或尝试使用对象)

代码语言:javascript
复制
i number:=0;

for crs in (SELECT <columns> FROM outlier_Sel) loop
  outlier_list(i).name := crs.outlier_list_name;
  outlier_list(i)(crs.account_id) := crs.account_name;
  ...
end loop;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40876552

复制
相关文章

相似问题

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