两个嵌套表集合之间的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区别的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Oracle SQL Developer 的存储过程中将表名列表作为参数传递?如何使用 PLSQL VARRAY 或嵌套表?