Oracle从number类型的数组中获取distict值

Oracle从number类型的数组中获取distict值,oracle,plsql,Oracle,Plsql,我在下面定义了一个数组类型- TYPE INPUT_ARRAY_NUM IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; 我已将上述类型的变量定义为- temp INPUT_ARRAY_NUM; 用以下值填充它们- temp(0) := 1; temp(1) := 1; temp(2) := 3; 如何获得不同的值(1,3)?您可以使用嵌套表和多集操作 MULTISET操作中的DISTINCT关键字将从集合中删除重复项 比如说, SQL> SET

我在下面定义了一个数组类型-

TYPE INPUT_ARRAY_NUM IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
我已将上述类型的变量定义为-

temp INPUT_ARRAY_NUM;
用以下值填充它们-

temp(0) := 1;
temp(1) := 1;
temp(2) := 3;

如何获得不同的值(1,3)?

您可以使用嵌套表
多集
操作

MULTISET
操作中的DISTINCT关键字将从集合中删除重复项

比如说,

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
  2    TYPE t_tab IS TABLE OF NUMBER;
  3    l_tab1 t_tab := t_tab(1,1,3,3,5,5);
  4  BEGIN
  5    l_tab1 := l_tab1 MULTISET INTERSECT DISTINCT l_tab1;
  6    FOR i IN l_tab1.first .. l_tab1.last
  7    LOOP
  8      DBMS_OUTPUT.put_line('Distinct values are '||l_tab1(i));
  9    END LOOP;
 10  END;
 11  /
Distinct values are 1
Distinct values are 3
Distinct values are 5

PL/SQL procedure successfully completed.

下面的代码片段将打印一个数组的不同值,您可以使用它

FOR y IN ( SELECT DISTINCT column_value
FROM TABLE ( CAST (newsites As siteArray ))
)
LOOP
Dbms_Output.Put_Line ('VAlue = ' || y.column_value);
END LOOP;

Dosen't work在call error中抛出错误的参数数量或类型。@RAZER这是一个简单的例子,我想你可以想出如何使它实际工作。无论如何,我现在已经添加了一个工作示例,请查看。@RAZER没问题:-)现在您知道怎么做了。
FOR y IN ( SELECT DISTINCT column_value
FROM TABLE ( CAST (newsites As siteArray ))
)
LOOP
Dbms_Output.Put_Line ('VAlue = ' || y.column_value);
END LOOP;