我创建了一个记录类型的嵌套表,使用循环填充。嵌套表可以用重复值填充。我想删除那些重复的值。
以下是在包规范中声明的
TYPE id_rec_type IS RECORD
( id NUMBER
,value NUMBER);
TYPE id_record IS TABLE OF id_rec_type;
下面的代码是同一个包中的过程的一部分。
DECLARE
loc_id_records id_record := id_record();
p_id_records id_record := id_record();
BEGIN
FOR rec IN (SELECT id,value
FROM table
WHERE active ='Y' )
LOOP
loc_id_records.EXTEND;
loc_id_records(loc_id_records.LAST).id := rec.id;
loc_id_records(loc_id_records.LAST).value := rec.value;
END LOOP;
p_id_records := loc_id_records;
END;
我尝试了MULTISET UNION DISTINCT,但出现以下错误
p_id_records := p_id_records MULTISET UNION DISTINCT loc_id_records;
PLS-00306: wrong number or types of arguments in call to
'MULTISET_UNION_DISTINCT'
是否有任何方法可以从嵌套表中删除重复值?
2条答案
按热度按时间hiz5n14c1#
在查询中使用
DISTINCT
,这样你就不会把重复的值放在集合中(你可以使用BULK COLLECT
而不是游标循环):然后,对于样本数据:
然后你可以调用它使用:
其输出:
fiddle
i2byvkas2#
您需要将MAP方法添加到您的类型中以使此对象具有可比性。没有这个Oracle数据库不知道如何比较您的对象。
dbms_output:
dbfiddle