Уникальное кол-во значений в Ассоциативном массиве

dimyaz
Дата: 20.10.2015 15:57:20
Как получить Уникальное кол-во значений в Ассоциативном массиве?
В интернете есть обходные решения, через временную таблицу либо через создание объектного типа.
Но то, что это нельзя сделать в Ассоциативном массиве, нигде нет.
declare
	type REC_ID is record (
		id	number
	);
	type tab_id is table of REC_ID index by binary_integer;
  tabId  tab_id;
  
  Cnt        number;
  UniqCnt    number;
begin
   tabId(1).id := 1;
   tabId(2).id := 2;
   tabId(3).id := 3;
   tabId(4).id := 4;
   tabId(5).id := 5;
   
   Cnt := tabId.Count;
   
   dbms_output.put_line('Total Count = '||Cnt);
   --dbms_output.put_line('Unique Count = '||???);
   
end;

Результат:
Total Count = 5
Unique Count = 4
dimyaz
Дата: 20.10.2015 16:20:47
dimyaz,

Без навороченных функций получилось так:

declare
	type REC_ID is record (
		id	number
	);
	type tab_id is table of REC_ID index by binary_integer;
  TabId  tab_id;
  UniqTabId  tab_id;
  
  Cnt        number;
  UniqCnt    number;

begin
   tabId(1).id := 1;
   tabId(2).id := 2;
   tabId(3).id := 3;
   tabId(4).id := 4;
   tabId(5).id := 1;
   
   Cnt := tabId.Count;
   
   dbms_output.put_line('Total Count = '||Cnt);
   -- Проверка
   for i in 1..tabId.Count loop
     if not UniqTabId.exists(tabId(i).id) then
        UniqTabId(tabId(i).id).id := 1;
     end if;
   end loop;
   -- 
   dbms_output.put_line('Unique Count = '||UniqTabId.Count);
   
end;
Elic
Дата: 20.10.2015 16:25:04
dimyaz
получилось так
Почти так и делают: индексируют значением.
dimyaz
     if not UniqTabId.exists(tabId(i).id) then
        UniqTabId(tabId(i).id).id := 1;
     end if;