如何从第一个集合中得到一组不在第二个集合中的值?
第一组:l_id_tab
第二套:RESOLUTION_T
错误:
PLS-00306:访问“MULTISET_EXCEPT_ALL”时参数的数量或类型错误
declare
TYPE RESOLUTION_COLL IS TABLE OF rowid;
RESOLUTION_T RESOLUTION_COLL:=RESOLUTION_COLL();
TYPE t_id_tab IS TABLE OF rowid;
l_id_tab t_id_tab:=t_id_tab();
TYPE nested_typ IS TABLE OF rowid;
answer nested_typ;
begin
select rowid
BULK COLLECT INTO l_id_tab
from MONITORING;
select s.rowid
BULK COLLECT INTO RESOLUTION_T
from RESEARCH_METRICS_NONAUD_pr ss
join RESEARCH_MEDIA_SOURCE source_dict on source_dict.id=ss.media_id
join RESEARCH_MS_CLIP_DICT cd on cd.media_id=ss.media_id and cd.clip_id=ss.CLIP_ID
join RESEARCH_MS_CLIP_TYPE ct on ct.id=cd.clip_type and ct.media_id=cd.media_id
join research_period pers on pers.prid=ss.period
join MONITORING s on s.action_date=pers.start_date
left join DE_MART.UNICOMPET_MS_CLIP_ATTR_DICT atd on atd.clip_id=cd.clip_id and
atd.media_id=cd.media_id and atd.BUSINESS_CATEGORY_ID=21
group by s.rowid;
answer := l_id_tab MULTISET EXCEPT RESOLUTION_T;
for iter in answer.first .. answer.last
loop
dbms_output.put_line(answer(iter));
end loop;
end;
existsPS收集方法也有类似的错误。
问题中列出的所有集合:
RESOLUTION_COLL,t_id_tab,nested_typ, 看起来都一样,因为它们包含具有相同数据类型的元素。但事实并非如此,PL/SQL 是一种强类型语言,这些集合属于不同的类型,它们不能将表达式的结果与另一种类型的集合进行比较或赋值。
错误是这样说的:
尝试只使用一种类型,一切都会奏效。
例如,期望像这样的一个值 5(在db<>fiddle上):