【问题标题】:merging two indexed nested tables per unique value in oracle plsql在oracle plsql中为每个唯一值合并两个索引嵌套表
【发布时间】:2014-07-23 01:15:22
【问题描述】:

我有这个记录类型,一个 VARCHAR2 列表:

TYPE varchar2_array IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;

在我的 PLSQL 中,我有两个这样的数组,我想根据 unique 值将它们合并到第三个数组中。类似的东西:

DECLARE
    TYPE varchar2_array IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;

    foo    varchar2_array;
    bar    varchar2_array;
    foobar varchar2_array;
BEGIN

    foo(1) := '1';
    foo(2) := '2';
    foo(3) := '3';

    bar(1) := '2';
    bar(2) := '3';
    bar(3) := '4';

    foobar := unique_merge (foo, bar);

    FOR i IN 1 .. foobar.COUNT LOOP
        DBMS_OUTPUT.PUT_LINE('foobar(' || i || ') : ' || foobar(i));
    END LOOP;

    -- output : 1, 2, 3, 4

END;

我正在寻找一种简单的方法来做到这一点。谢谢。

【问题讨论】:

  • foobar的索引重要吗?如果是这样,我认为foobar 的索引也很重要,在这种情况下,您需要解释一般如何确定它。如果索引不重要,为什么要使用关联数组而不是嵌套表?
  • @AskAiser,你看到我的回答了吗?它对你有好处还是你期待别的东西?

标签: oracle plsql oracle11g


【解决方案1】:

尝试 MULTISET UNION DISTINCT。 解决方案可能类似于

customer_list_3 := customer_list_2  MULTISET UNION DISTINCT customer_list_1

编辑:

好吧,我做错了,我没看到这不是嵌套表。

这是一个可能的实现:

DECLARE
    TYPE VAR_TABLE_TYPE IS TABLE OF VARCHAR2(10);
    TYPE varchar2_array IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;

    foo    varchar2_array;
    bar    varchar2_array;
    foobar varchar2_array;
    foobar_tmp VAR_TABLE_TYPE:= VAR_TABLE_TYPE() ;
    j number;
BEGIN

    foo(1) := '1';
    foo(2) := '2';
    foo(3) := '3';

    bar(1) := '2';
    bar(2) := '3';
    bar(3) := '4';

j:=foo.count;

for i in foo.first .. foo.last
  loop
              foobar_tmp.EXtend;
            foobar_tmp(i) :=  foo(i) ;
  end loop;

for i in bar.first .. bar.last
  loop
              foobar_tmp.EXtend;
            foobar_tmp(j+i) :=  bar(i) ;
  end loop;

  foobar_tmp :=  SET (foobar_tmp) ;

for i in foobar_tmp.first .. foobar_tmp.last
  loop
 foobar(i) :=  foobar_tmp(i) ;
  end loop;  


for i in foobar.first .. foobar.last
  loop
    DBMS_OUTPUT.PUT_LINE('foobar(' || i || ') '||foobar(i));
    end loop;
END;

【讨论】:

  • 不幸的是,它抛出“PLS-00306:在调用'MULTISET_UNION_DISTINCT'时参数的数量或类型错误”。我认为这是因为“INDEXED BY”子句。
  • 这个答案是完全错误的。 Multiset operators 使用 嵌套表 可以从文档中找到:Multiset 运算符将两个嵌套表的结果组合到一个嵌套表中。
  • @eliatou 好用,又学会了一个新的操作符(SET),谢谢。
猜你喜欢
  • 1970-01-01
  • 2015-05-27
  • 2012-08-06
  • 1970-01-01
  • 2020-05-17
  • 2012-08-31
  • 2019-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多