DELETE 方法删除集合中的条目。您可以通过三种不同的方式调用 DELETE 方法。

使用 DELETE 方法的第一种形式删除集合中的所有条目:

collection.DELETE

使用 DELETE 方法的第二种形式从集合中删除指定的条目:

collection.DELETE(subscript)

使用 DELETE 方法的第三种形式从集合中删除 first_subscript 和 last_subscript 指定的范围内的条目(包括 first_subscript 和 last_subscript 条目)。

collection.DELETE(first_subscript, last_subscript)

如果 first_subscript 和 last_subscript 引用不存在的元素,则删除指定下标之间的元素。如果 first_subscript 大于 last_subscript,或者您为其中一个参数指定 NULL 值,则 DELETE 不起作用。

请注意,删除条目时,下标仍保留在集合中;您可以将下标重用于备用条目。如果指定 DELETE 方法的调用中不存在的下标,则DELETE 不会引发异常。

以下示例演示如何使用 DELETE 方法从集合中删除带有下标 0 的元素:

DECLARE
    TYPE sparse_arr_typ IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
    sparse_arr      sparse_arr_typ;
    v_results       VARCHAR2(50);
    v_sub           NUMBER;
BEGIN
    sparse_arr(-100)  := -100;
    sparse_arr(-10)   := -10;
    sparse_arr(0)     := 0;
    sparse_arr(10)    := 10;
    sparse_arr(100)   := 100;
    DBMS_OUTPUT.PUT_LINE('COUNT: ' || sparse_arr.COUNT);
    sparse_arr.DELETE(0);
    DBMS_OUTPUT.PUT_LINE('COUNT: ' || sparse_arr.COUNT);
    v_sub := sparse_arr.FIRST;
    WHILE v_sub IS NOT NULL LOOP
        IF sparse_arr(v_sub) IS NULL THEN
            v_results := v_results || 'NULL ';
        ELSE
            v_results := v_results || sparse_arr(v_sub) || ' ';
        END IF;
        v_sub := sparse_arr.NEXT(v_sub);
    END LOOP;
    DBMS_OUTPUT.PUT_LINE('Results: ' || v_results);
END;

COUNT: 5
COUNT: 4
Results: -100 -10 10 100

COUNT 表示在调用 DELETE 方法之前,集合中有 5 个元素;在调用 DELETE 方法之后,该集合包含 4 个元素。