Как найти, является ли список подсписком другого списка?
Хочу найти, является ли список подсписком другого списка.
Это фрагмент кода процедуры:
TYPE TYPE_LIST IS TABLE OF VARCHAR(200);
CHILD_ITEMS TYPE_LIST;
PARENT_ITEMS TYPE_LIST := TYPE_LIST('item1','item2','item3','item4','item5');
SELECT A.NAME BULK COLLECT INTO CHILD_ITEMS
FROM TABLE_A A, TABLE_B B WHERE A.ID = B.ITEM_ID;
Надо проверить, является ли CHILD_ITEMS подсписком PARENT_ITEMS, то есть, все элементы CHILD_ITEMS являются частью PARENT_ITEMS. Например:
CHILD_ITEMSсодержит'item1','item2'- условие вернётtrue,- а если содержит
'item1','item2','item100', тоfalse, т.к.'item100'не являются частьюPARENT_ITEMS.
Как написать IF условие в этом случае?
Свободный перевод вопроса Check whether a list is sublist of another list in Oracle PL/SQL от участника @VGH
Ответы (1 шт):
Автор решения: 0xdb
→ Ссылка
Надо воспользоваться SUBMULTISET условием. Например:
declare
type itemList is table of varchar(8);
childItems itemList := itemList ('item2','item3','item4');
parentItems itemList := itemList ('item1','item2','item3','item4','item5');
begin
if childItems submultiset of parentItems then
dbms_output.put_line ('is subset');
else
dbms_output.put_line ('is not subset'); end if;
childItems.extend;
childItems(childItems.last) := 'item100';
if childItems submultiset of parentItems then
dbms_output.put_line ('is subset');
else
dbms_output.put_line ('is not subset'); end if;
end;
/
is subset
is not subset