要检查Oracle中集合的所有记录是否相同?

时间:2018-01-22 16:12:38

标签: oracle collections plsql nested

我正在编写一个Oracle Procedure,我已经声明了一个嵌套数组来存储一些元素。我想看看集合中的所有元素是否相同。 我打开使用for循环或任何Oracle函数。

2 个答案:

答案 0 :(得分:3)

也许你也可以使用SET操作:

DECLARE
   type num_tab_type  is table of number;
   tab1  num_tab_type := num_tab_type(1,2,3,4);

BEGIN
    IF SET(tab1).COUNT = 1 then
        DBMS_OUTPUT.put_Line('All elements tab1 are the same');
    END IF;

END;
/

也许你也在寻找IS A SET,这恰恰相反。

答案 1 :(得分:2)

您可以将multiselect union distinct与空实例一起使用,然后使用COUNT

SET SERVEROUTPUT ON;
DECLARE
   type num_tab_type  is table of number;
   tab1  num_tab_type := num_tab_type(1,2,3,4);
   tab2  num_tab_type := num_tab_type(2,2,2);
   tab_empty num_tab_type := num_tab_type();

   tab num_tab_type;
BEGIN
    tab:= tab1 MULTISET UNION DISTINCT tab_empty;

    DBMS_OUTPUT.put_Line('tab1 ' ||  
                    CASE WHEN tab.COUNT IN(0,1) THEN 'all elements are the same' 
                    ELSE 'not all elements are the same' END);

    tab:= tab2 MULTISET UNION DISTINCT tab_empty;
    DBMS_OUTPUT.put_Line('tab2 ' || 
                  CASE WHEN tab.COUNT IN(0,1)THEN 'all elements are the same' 
                  ELSE 'not all elements are the same' END);
END;
/

输出:

tab1 not all elements are the same
tab2 all elements are the same