如何从一个dbms_sql.number_table中选择另一个

时间:2018-06-25 15:07:29

标签: oracle plsql

我正在将索引列表(包括重复项)作为dbms_sql.number_table传递给函数,并希望从中选择唯一的条目进入另一个dbms_sql.number_table。

到目前为止,我已经有了一些类似的东西:

function selectIndices(tlngIndexList in in dbms_sql.number_table) return number
is
  tlngUniqueIndices dbms_sql.number_table;
begin
  select distinct * from tlngIndexList into tlngUniqueIndices;
  --Etc

尽管SQL Developer给我一个“ ORA-00942:表或视图不存在”错误,所以看来这不是正确的方法。有任何想法吗?预先感谢。

1 个答案:

答案 0 :(得分:1)

从SQL查询填充集合的语法是:

select x bulk collect into y from z;

以下内容适用于12.2(可能未经测试也可能适用于12.1):

create or replace function selectIndices
    ( tlngIndexList in dbms_sql.number_table )
    return number
as
    tlngUniqueIndices dbms_sql.number_table;
begin
    select distinct column_value bulk collect into tlngUniqueIndices
    from table(tlngIndexList);

    return tlngUniqueIndices.count;
end selectIndices;

在早期版本中,您可以尝试使用该集合的值作为第二个集合的索引,以对它进行重复数据删除:

create or replace function selectIndices
    ( tlngIndexList in dbms_sql.number_table )
    return number
as
    tlngUniqueIndices dbms_sql.number_table;
    i pls_integer := tlngIndexList.first;
begin 
    while i is not null loop
        tlngUniqueIndices(tlngIndexList(i)) := tlngIndexList(i);
        i := tlngIndexList.next(i);
    end loop;

    return tlngUniqueIndices.count;
end selectIndices;