集合方法
集合方法是一个PL/SQL子程序(或者是一个返回信息的函数,或者是操作集合的过程)。集合方法使得集合更容易被使用,应用程序更容易维护。
注意:对于NULL集合,EXISTS是唯一一个不会引发COLLECTION_IS_NULL异常的方法。
集合方法
DELETE | 过程 | 从集合中删除元素 |
TRIM | 过程 | 从可变数组或嵌套表删除元素 |
EXTEND | 过程 | 在可变数组或嵌套表尾部添加元素 |
EXISTS |
| 当且仅当可变数组或嵌套表存在时返回true |
FIRST |
| 返回集合中第1个索引 |
LAST |
| 返回集合中最后一个索引 |
COUNT |
| 返回集合中元素个数 |
LIMIT |
| 返回集合的上限 |
PRIOR |
| 返回指定索引的前一个索引 |
NEXT |
| 返回指定索引的后一个索引 |
调用集合方法
collection_name.method |
集合方法的调用可以出现在该种类型的PL/SQL子程序可以出现的任何地方,除了SQL中。
在子程序中,集合参数假定参数的属性与它绑定在一起。所以可以对这种参数使用集合方法。
DELETE方法
有下面的形式:
n 删除任何集合对象中的所有元素。该操作立即释放分配给被删除元素的空间。
n 从关联数组和嵌套表
u DELETE(n),如果存在,则删除索引为n的元素,否则什么都不做。
u DELETE(m, n),如果m, n存在且m <=n,则删除索引在m..n范围内的所有元素,否则什么都不做。
后2种删除,PL/SQL为删除的元素保留占位符。因此删除的元素包含在集合的内部大小中,可以通过赋予一个有效值来恢复删除的元素。
DECLARE nt nt_type := nt_type(11, 22, 33, 44, 55, 66); --嵌套表 BEGIN dbms_output.put_line('初始元素'); print_nt(nt); nt.DELETE(2); dbms_output.put_line('删除第2个元素后'); print_nt(nt); nt(2) := 2222; dbms_output.put_line('恢复第2个元素后'); print_nt(nt); nt.DELETE(2, 4); dbms_output.put_line('删除第2-4元素后'); print_nt(nt); nt(3) := 3333; dbms_output.put_line('恢复第3个元素后'); print_nt(nt); nt.DELETE; dbms_output.put_line('删除所有元素后'); print_nt(nt); END;
|
DECLARE --关联数组 TYPE aa_type_str IS TABLE OF INTEGER INDEX BY VARCHAR2(10); aa_str aa_type_str;
PROCEDURE print_aa_str IS i VARCHAR2(10); BEGIN i := aa_str.FIRST;
IF i IS NULL THEN DBMS_OUTPUT.PUT_LINE('aa_str为空'); ELSE WHILE i IS NOT NULL LOOP DBMS_OUTPUT.PUT('aa_str.(' || i || ') = '); print(aa_str(i)); i := aa_str.NEXT(i); END LOOP; END IF;
DBMS_OUTPUT.PUT_LINE('---'); END print_aa_str;
BEGIN aa_str('A') := 11; aa_str('B') := 22; aa_str('C') := 33; dbms_output.put_line('初始状态'); print_aa_str;
aa_str.DELETE; dbms_output.put_line('删除所有元素之后'); print_aa_str;
aa_str('A') := 11; -- 使用相同的值替换删除的元素 aa_str('B') := 44; -- 使用不同的值替换删除的元素 aa_str('C') := 55; -- 使用不同的值替换删除的元素 aa_str('D') := 66; -- 添加新元素 aa_str('E') := 77; -- 添加新元素 aa_str('F') := 88; -- 添加新元素 aa_str('G') := 99; -- 添加新元素 aa_str('H') := 100; -- 添加新元素 aa_str('I') := 101; -- 添加新元素 dbms_output.put_line('修改和添加元素之后'); print_aa_str;
aa_str.DELETE('C'); dbms_output.put_line('删除C元素之后'); print_aa_str;
aa_str.DELETE('F','I'); dbms_output.put_line(' |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17013648/viewspace-1116012/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17013648/viewspace-1116012/