检查一个列表是否是 Oracle 中另一个列表的子列表 PL/SQL
Check whether a list is sublist of another list in Oracle PL/SQL
下面是Oracle 12C中存储过程的代码片段。我的目标是确定一个列表(使用 select 语句准备)是否是另一个列表(5 项的预定义列表)的子列表。
TYPE TYPE_LIST IS TABLE OF VARCHAR(200);
CHILD_ITEMS TYPE_LIST;
PARENT_ITEMS TYPE_LIST := TYPE_LIST('item1','item2','item3','item4','item5');
-- collect child items
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 ('item1','item2','item3','item4','item5')
的一部分),我必须执行一些步骤。
如果说 CHILD_ITEMS
包含 'item1','item2'
条件应该 return 为真。
如果说 CHILD_ITEMS
包含 'item1','item2','item100'
条件应该 return false 因为 'item100'
不是 PARENT_ITEMS
的一部分。
那么在这种情况下IF condition
怎么写呢?
DECLARE
TYPE TYPE_LIST IS TABLE OF VARCHAR(200);
CHILD_ITEMS TYPE_LIST := TYPE_LIST('item1', 'item3');
PARENT_ITEMS TYPE_LIST := TYPE_LIST('item1','item2','item3','item4','item5');
BEGIN
IF child_items SUBMULTISET OF parent_items THEN
DBMS_OUTPUT.PUT_LINE( 'Is subset.' );
ELSE
DBMS_OUTPUT.PUT_LINE( 'Is not subset.' );
END IF;
END;
/
输出:
Is subset.
db<>fiddle here
下面是Oracle 12C中存储过程的代码片段。我的目标是确定一个列表(使用 select 语句准备)是否是另一个列表(5 项的预定义列表)的子列表。
TYPE TYPE_LIST IS TABLE OF VARCHAR(200);
CHILD_ITEMS TYPE_LIST;
PARENT_ITEMS TYPE_LIST := TYPE_LIST('item1','item2','item3','item4','item5');
-- collect child items
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 ('item1','item2','item3','item4','item5')
的一部分),我必须执行一些步骤。
如果说 CHILD_ITEMS
包含 'item1','item2'
条件应该 return 为真。
如果说 CHILD_ITEMS
包含 'item1','item2','item100'
条件应该 return false 因为 'item100'
不是 PARENT_ITEMS
的一部分。
那么在这种情况下IF condition
怎么写呢?
DECLARE
TYPE TYPE_LIST IS TABLE OF VARCHAR(200);
CHILD_ITEMS TYPE_LIST := TYPE_LIST('item1', 'item3');
PARENT_ITEMS TYPE_LIST := TYPE_LIST('item1','item2','item3','item4','item5');
BEGIN
IF child_items SUBMULTISET OF parent_items THEN
DBMS_OUTPUT.PUT_LINE( 'Is subset.' );
ELSE
DBMS_OUTPUT.PUT_LINE( 'Is not subset.' );
END IF;
END;
/
输出:
Is subset.
db<>fiddle here