我有这种记录类型,VARCHAR2的列表:
TYPE varchar2_array IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
在我的PLSQL中,我有两个这样的数组,我想将每个唯一值将它们合并到第三个数组中。就像是 :
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;
我正在寻找一种简单的方法来做到这一点。谢谢。
尝试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;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句