DELETE方法

DELETE方法用于从集合中删除一个、一批或者全部元素。

DELETE方法有三种形式:

  1. DELETE: 不带参数的DELETE方法用于删除集合中的所有元素
  2. DELETE(N): 删除嵌套表或者索引表中的第N个元素,且删除索引表时,N可以为字符串类型。
  3. 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;

注解

  1. 变长数组是密集的,当把DELETE操作用于变长数组时,只能使用不带参数的DELETE,即删除所有的元素。
  2. 调用DELETE删除元素时,如果被删除的元素不存在,DELETE只是简单的忽略它,并不抛出异常。
  3. PL/SQL会被删除的元素保留一个占位符,以便于我们可以重新为被删除的元素赋值。
  4. 调用不带参数的DELETE方法时,PL/SQL不在为集合变量保留占位符,若要重新使用此集合则需要重新扩展集合空间。