DELETE方法¶
DELETE方法用于从集合中删除一个、一批或者全部元素。
DELETE方法有三种形式:
- DELETE: 不带参数的DELETE方法用于删除集合中的所有元素
- DELETE(N): 删除嵌套表或者索引表中的第N个元素,且删除索引表时,N可以为字符串类型。
- DELETE(M,N): 删除嵌套表或者索引表中键以M开始以N结束的闭区间内的所有元素。如果集合是一个用字符串做索引的索引表,MN就是字符串,否则,MN为整数。
下面的例子给出了DELETE的用法:
示例:DELETE方法¶
--清理环境
DROP PROCEDURE proc;
DROP TABLE tab CASCADE;
create table tab(a varchar(2));
insert into tab values('a');
CREATE OR REPLACE PROCEDURE proc AS
declare
type table_typ is table of tab.a%type
index by binary_integer;
typ table_typ;
begin
typ(-1):='aa';
typ(2):='bb';
typ(3):='cc';
typ(4):='dd';
typ(7):='ee';
typ.delete(-1); --删掉元素'aa'
typ.delete(6,3); --没有删掉任何元素
typ.delete(3,6); --删掉元素'cc' & 'dd'
typ.delete; --删掉当前所有元素 ('ee' & 'bb')
dbms_output.put_line( '集合元素总个数:' || typ.count);
end;
/
EXEC proc;
--删除
DROP PROCEDURE proc;
DROP TABLE tab CASCADE;
注解
- 变长数组是密集的,当把DELETE操作用于变长数组时,只能使用不带参数的DELETE,即删除所有的元素。
- 调用DELETE删除元素时,如果被删除的元素不存在,DELETE只是简单的忽略它,并不抛出异常。
- PL/SQL会被删除的元素保留一个占位符,以便于我们可以重新为被删除的元素赋值。
- 调用不带参数的DELETE方法时,PL/SQL不在为集合变量保留占位符,若要重新使用此集合则需要重新扩展集合空间。