检查一个列表是否是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_ITEMSPARENT_ITEMS的子列表(在这种情况下,如果CHILD_ITEMS的所有项目都是PARENT_ITEMS ('item1','item2','item3','item4','item5')的一部分),我必须执行一些步骤。

如果说CHILD_ITEMS包含'item1','item2'条件应返回 true。 如果说CHILD_ITEMS包含'item1','item2','item100'条件应该返回 false,因为'item100'不是PARENT_ITEMS的一部分。

那么在这种情况下如何编写IF condition呢?

使用SUBMULTISET运算符:

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<>小提琴在这里

相关内容

  • 没有找到相关文章

最新更新