两个嵌套表集合之间的plsql区别

Posted

技术标签:

【中文标题】两个嵌套表集合之间的plsql区别【英文标题】:plsql difference between two Nested Table collections 【发布时间】: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'

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

谢谢...

【问题讨论】:

【参考方案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;

希望这会有所帮助。

【讨论】:

以上是关于两个嵌套表集合之间的plsql区别的主要内容,如果未能解决你的问题,请参考以下文章

SQL记录-PLSQL集合

嵌套表用法详解(PLSQL)

嵌套表和 VARRAY 之间的区别

PLSQL集合笔记

如何在 Oracle SQL Developer 的存储过程中将表名列表作为参数传递?如何使用 PLSQL VARRAY 或嵌套表?

如何在查询中取消嵌套嵌套表的集合?