以前都是断断续续的看的oracle操作集合方法,比较片面,网上搜了一把,做个总结:
集合方法 :ORACLE 提供的用于操纵集合变量的内置函数或过程 , 其中 EXISTS,COUNT,LIMIT,FIRST,NEXT,FRIOR 和 NEXT 是函数
而 EXTEND,TRIM 和 DELETE 则是过程
集合方法只能在 PL/SQL 语句中使用 , 不能在 SQL 语句中使用 .
集合方法 EXTEND 和 TRIM 只适用于嵌套表和 VARRAY, 而不适合于索引表
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 ename_table(1):='SCOTT'; else dbms_output.put_line('必须初始化集合元素'); end if; end;
2.COUNT: 用于返回当前集合变量中的元素总个数 .
declare type ename_table_type is table of emp.ename%type index by binary_integer; ename_table ename_table_type; begin ename_table(-5):='scott'; ename_table(1):='smith'; ename_table(5):='mary'; ename_table(10):='blake'; dbms_output.put_line('集合元素总个数:'||ename_table.count); end;
3.LIMIT: 用于返回集合元素的最大个数 . 因为嵌套表和索引表的余数个数没有限制 , 返回 NULL
对于 VARRAY 来说,该方法返回 VARRAY 所允许的最大元素个数
declare type ename_table_type is varray(20) of emp.ename%type; ename_table ename_table_type:=ename_table_type('mary'); begin dbms_output.put_line('集合元素的最大个数:'||ename_table.limit); end;
4.FIRST 和 LAST:FIRST 用于返回集合变量第一个元素的下标 , 而 LAST 方法则用于返回集合变量最后一个元素的下标
declare type ename_table_type is table of emp.ename%type index by binary_integer; ename_table ename_table_type; begin ename_table(-5):='scott'; ename_table(1):='smith'; ename_table(5):='mary'; ename_table(10):='blake'; dbms_output.put_line('第一个元素:'||ename_table.first); dbms_output.put_line('最后一个元素:'||ename_table.last); end;
5.FRIOR 和 NEXT:PRIOR 返回当前集合元素的前一个元素的下标 , 而 NEXT 方法则用于返回当前集合元素的后一个元素的下标
declare type ename_table_type is table of emp.ename%type index by binary_integer; ename_table ename_table_type; begin ename_table(-5):='scott'; ename_table(1):='smith'; ename_table(5):='mary'; ename_table(10):='blake'; dbms_output.put_line('元素5的前一个元素:'||ename_table.prior(5)); dbms_output.put_line('元素5的后一个元素:'||ename_table.next(5)); end;
6.EXTEND: 用于扩展集合变量的尺寸 , 并为它们增加元素 . 只适用于嵌套表和 VARRAY.
三种调用格式 :EXTEND,EXTEND(N),EXTEND(N,I): 添加 N 个元素 , 值与第 I 个元素相同
declare type ename_table_type is varray(20) of varchar2(10); ename_table ename_table_type; begin ename_table:=ename_table_type('mary'); ename_table.extend(5,1); dbms_output.put_line('元素个数:'||ename_table.count); end;
7.TRIM: 用于从集合尾部删除元素 , 有 TRIM 和 TRIM(N) 两种调用格式 .
只适用于嵌套表和 VARRAY
declare type ename_table_type is table of varchar2(10); ename_table ename_table_type; begin ename_table:=ename_table_type('a','a','a','a','a'); ename_table.trim(2); dbms_table.put_line('元素个数:'||ename_table.count); end;
8.DELETE: 删除结合元素 , 但该方法只适用于嵌套表和索引表 , 不适用于 VARRAY.
有 DELETE,DELETE(N),DELETE(M,N) 三种调用方式 .
DETELE(M,N) 删除集合变量从 M 到 N 之间的所有元素
declare type ename_table_type is table of emp.ename%type index by binary_integer; ename_table ename_table_type; begin ename_table(-5):='scott'; ename_table(1):='smith'; ename_table(5):='mary'; ename_table(10):='blake'; ename_table.delete(5); dbms_output.put_line('元素总个数:'||ename_table.count); end;