4

我有两个嵌套表类型的 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'

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

谢谢...

4

2 回答 2

6

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

nt3 := nt1 multiset except nt2;

了解更多


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

是的,使用multiset except distinct.

有很多收集运营商。正如我们所期望的那样,PL/SQL 文档中涵盖了它们。 在这里找到它

于 2012-08-09T10:58:38.967 回答
1

基本上,您想对嵌套表使用减号功能。在 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;

希望这可以帮助。

于 2012-08-09T17:46:09.147 回答