2015-09-10 2 views
0

У меня есть три массива. Мне нужно использовать курсоры или петли, чтобы пропустить их все и оставить три новых массива слов без дубликатов. Есть ли способ удалить элемент в массивах или мне нужно собрать массивы с нуля.Найти уникальные слова в Oracle Table Arrays

Массивы:

DECLARE 
type word1_array is table of varchar2(80); 
type word2_array is table of varchar2(80); 
type word3_array is table of varchar2(80); 
WordGroup1 word1_array DEFAULT word1_array(); 
WordGroup2 word1_array DEFAULT word1_array(); 
WordGroup3 word1_array DEFAULT word1_array(); 
BEGIN 
    WordGroup1 := word1_array('job', 'cob', 'lob', 'rob', 'cob', 'job'); 
    WordGroup2 := word2_array('one', 'job', 'cob', 'job', 'bon', 'one'); 
    WordGroup3 := word3_array('win', 'sin', 'wry', 'fly', 'job', 'job'); 
-- remove the duplicates 
for word in WordGroup1.values 
loop 
dbms_output.put_line(word); 
end loop; 

END; 

ответ

2

Использование:

  • SET(), чтобы получить различные значения коллекции; и
  • MULTISET EXCEPT DISTINCT, чтобы получить различные значения коллекции, которые не находятся в другой коллекции.

Как это:

DECLARE 
    type word1_array is table of varchar2(80); 
    WordGroup1 word1_array := word1_array('job', 'cob', 'lob', 'rob', 'cob', 'job'); 
    WordGroup2 word1_array := word1_array('one', 'job', 'cob', 'job', 'bon', 'one'); 
    WordGroup3 word1_array := word1_array('win', 'sin', 'wry', 'fly', 'job', 'job'); 
BEGIN 
    WordGroup1 := SET(WordGroup1); 
    dbms_output.put_line('WordGroup1'); 
    for i in 1.. WordGroup1.COUNT loop 
    dbms_output.put_line(WordGroup1(i)); 
    end loop; 
    WordGroup2 := WordGroup2 MULTISET EXCEPT DISTINCT WordGroup1; 
    dbms_output.put_line('WordGroup2'); 
    for i in 1.. WordGroup2.COUNT loop 
    dbms_output.put_line(WordGroup2(i)); 
    end loop; 
    WordGroup3 := (WordGroup3 MULTISET EXCEPT DISTINCT WordGroup2) MULTISET EXCEPT DISTINCT WordGroup1; 
    dbms_output.put_line('WordGroup3'); 
    for i in 1.. WordGroup3.COUNT loop 
    dbms_output.put_line(WordGroup3(i)); 
    end loop; 
END; 
+0

Отлично !. Мне нужно будет найти документацию. Мне также необходимо сделать их уникальными между каждым массивом таблиц. Можно также установить работу между массивами, чтобы она удаляла «задание» во 2-й и 3-й табличных массивах. – RetroCoder

+1

@RetroCoder Обновлены и добавлены ссылки на некоторые документы. – MT0

Смежные вопросы