当前位置: 代码迷 >> SQL >> PL/SQL温习五 集合方法
  详细解决方案

PL/SQL温习五 集合方法

热度:43   发布时间:2016-05-05 13:28:36.0
PL/SQL复习五 集合方法

1.exists:判断某集合元素是否存在

declare

??type ename_table_type is table of emp.ename%type;

??ename_table ename_table_type;

begin

??if ename_table.exists(1) then

?? ?dbms_output.put_line('存在');

?? ?else

?? ? ?dbms_output.put_line('不存在');

??end if;

end;

/

2.count:返回集合元素的个数 例如:ename_table.count

3.limit:返回该集合允许的最大元素个数 索引表和嵌套无边界所以返回null 例如:ename_table.limit

4.first、last:返回集合第一个和最后一个元素的下标 例如:ename_table.first

5.frior、next:返回当前集合元素的前、后一个元素的下标 例如:ename_table.frior(5)

6.extend:用于扩展集合变量的尺寸,只适用于嵌套表和varray,有如下形式

?? extend:为集合变量添加一个null元素

?? extend(n):为集合变量添加n 个null元素

?? extend(n,i):为集合添加n个元素,元素值与第i个元素相同

7.trim:用于从集合尾删除元素, trim删除一个 trim(n)删除n个

8.delete 删除集合元素,只适用于嵌套和索引表

??delete:删除所有元素 ?delete(n) 删除第n 个元素 ?delete(m,n)删除集合变量从m到n之间的所有元素

?

给集合赋null值,只需将一个集合等于另一个没赋值的集合

?

?

集合操作符:

1.set:返回取消特定嵌套表中的重复值的嵌套表

declare

??type nt_table_type is table of integer;

??nt_table nt_table_type := nt_table_type(2,4,3,2,1);

??res nt_table_type;

begin

??res := set(nt_table);

??for i in 1..res.count loop

?? ?dbms_output.put_line(res(i));

??end loop;

end;

/

2.multiset union:取得两个嵌套表的并集 用法:

??result = nt1 multiset union nt2;

3.multiset union distinct:取得并集,去掉重复值

?? ? result = nt1 multiset union distinct nt2;

4.multiset intersect:取得交集

??result = nt1 multiset intersect nt2;

5.multiset except:取差集

??result = nt1 multiset except nt2;

?

?

集合的比较:

1. array_name is null:检测是否为空

2.ename_table1 = ename=table2:比较两个集合是否完全相同

嵌套表的:

3.cardinality:返回元素个数

4.submultiset of:是否是子表

5.member of:是否包含特定元素 v1 member of nt1?

6.is a set:检测是否包含重复元素值 nt1 is a set

?

  相关解决方案