DELETEは、コレクションから要素を削除するために使用されます。
適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
DELETEメソッドの使用方法は以下のとおりです:
DELETEは、コレクション内のすべての要素(任意のタイプを含む)を削除できます。DELETE操作は、削除された要素に割り当てられたメモリを即座に解放します。関連配列またはネストテーブル(可変配列を除く)について:
- DELETE(n) : 索引がnの要素を削除します。その要素が存在しない場合、DELETEは無効です。
- DELETE(m,n) : mとnが両方存在し、かつmがn以下の場合、m~nの範囲内のすべての要素を削除します。そうでない場合、DELETEは無効です。
これら2つの形式のDELETEについて、PLは削除された要素のプレースホルダーを保持します。したがって、削除された要素はコレクションの内部サイズに含まれており、有効な値を割り当てることで削除された要素を復元できます。
例:
obclient> CREATE OR REPLACE TYPE nested_type IS TABLE OF VARCHAR(20);/
Query OK, 0 rows affected
obclient> CREATE OR REPLACE PROCEDURE print_t (t nested_type) AUTHID DEFINER IS
i NUMBER;
BEGIN
i := t.FIRST;
IF i IS NULL THEN
DBMS_OUTPUT.PUT_LINE('t is empty');
ELSE
WHILE i IS NOT NULL LOOP
DBMS_OUTPUT.PUT('t.(' || i || ') = ');
DBMS_OUTPUT.PUT_LINE(NVL(TO_CHAR(t(i)), 'NULL'));
i := t.NEXT(i);
END LOOP;
END IF;
DBMS_OUTPUT.PUT_LINE('---');
END print_t;
/
Query OK, 0 rows affected
obclient> DECLARE
t nested_type:= nested_type('A', 'B', 'C', 'D', 'E', 'F');
BEGIN
print_t(t);
t.DELETE(3); -- 3番目の要素を削除
print_t(t);
t(3) := 'cc'; -- 3番目の要素を復元
print_t(t);
t.DELETE(2, 4); -- 要素のシーケンスを削除
print_t(t);
t(3) := 'cccc'; -- 3番目の要素を復元
print_t(t);
t.DELETE; -- すべての要素を削除
print_t(t);
END;
/
Query OK, 0 rows affected
t.(1) = A
t.(2) = B
t.(3) = C
t.(4) = D
t.(5) = E
t.(6) = F
---
t.(1) = A
t.(2) = B
t.(4) = D
t.(5) = E
t.(6) = F
---
t.(1) = A
t.(2) = B
t.(3) = cc
t.(4) = D
t.(5) = E
t.(6) = F
---
t.(1) = A
t.(5) = E
t.(6) = F
---
t.(1) = A
t.(3) = cccc
t.(5) = E
t.(6) = F
---
t is empty
---
上記の例では、ネストテーブル変数を宣言し、6つの要素を初期化して代入しています。それぞれ以下の操作を実行しました:
3番目の要素を削除してから復元します。
一連の要素を削除してから、そのうちの1つの要素を復元します。
すべての要素を削除します。
復元された要素は、対応する削除された要素と同じメモリを占有します。print_ntストアドプロシージャは、初期化後および各DELETE操作後にネストテーブル変数を出力します。