我正在将索引列表(包括重复项)作为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:表或视图不存在”错误,所以看来这不是正确的方法。有任何想法吗?预先感谢。
答案 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;