【问题标题】:plsql difference between two Nested Table collections两个嵌套表集合之间的plsql区别
【发布时间】:2012-08-06 12:34:27
【问题描述】:

我有两个嵌套表类型的 PLSQL 数组:

TYPE nested_typ IS TABLE OF VARCHAR2(21);

nt1 nested_typ := nested_typ('abc','def','123');
nt2 nested_typ := nested_typ('123');

我想要这两个集合的区别,对于上面的例子:'def','abc'

请建议任何简单的方法来做到这一点?

谢谢...

【问题讨论】:

    标签: arrays oracle collections plsql nested-table


    【解决方案1】:

    这些是简单的类型,因此您可以使用 PL/SQL 的集合比较运算符。在您的情况下,您想使用 MULTISET EXCEPT (与 SQL MINUS 运算符的工作方式相同)。给定第三个嵌套表,您将编写如下代码:

    nt3 := nt1 multiset except nt2;
    

    Find out more.


    “当数组中没有重复元素时,这可以正常工作... 有没有其他方法可以删除所有出现的“123” nt1?”

    是的,使用multiset except distinct

    有很多集合运算符。正如我们所期望的那样,PL/SQL 文档中涵盖了它们。 Find it here

    【讨论】:

    • 当数组中没有重复元素时,这可以正常工作。假设以下数据: nt1 nested_typ := nested_typ('abc','123','def','123'); nt2 nested_typ := nested_typ('123');,然后 nt3 := nt1 multiset 除了 nt2;将导致'abc','def','123',有没有其他方法可以删除nt1中所有出现的'123'?
    【解决方案2】:

    基本上,您希望对嵌套表使用减号功能。 在 10g 中有一个称为 MULTISET EXCEPT 的新功能。如果要将减号的输出存储在变量中,请按照以下步骤操作

    declare var1 <nested table type>
    

    在代码的开始部分,您编写以下代码以获得减号输出

    var1:=var2 multiset except var3;
    

    看看这个

    Declare     
      TYPE nested_typ IS TABLE OF VARCHAR2(21); 
      nt1 nested_typ := nested_typ('abc','def','123');     
      nt2 nested_typ := nested_typ('123');    
      nt3 nested_typ;    
    Begin
      nt3 := nt1 multiset except nt2; 
      dbms_output.put_line(nt3(1)||' '||nt3(2));  
    end;
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2015-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      • 2011-09-06
      • 2014-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多