PRIOR と NEXT は、コレクション内を前進および後退するために使用できます(DELETE 操作がプレースホルダーを保持している場合でも、削除された要素は無視されます)。
適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
PRIOR と NEXT の両方のメソッドは、疎なコレクションをイテレーションする場合に適用されます。
インデックスを指定した後:
PRIORは、そのコレクション内で以前存在した要素のインデックスを返します(存在する場合)。そうでない場合、PRIORはNULLを返します。任意のコレクションcについて、c.PRIOR(c.FIRST)はNULLを返します。NEXTは、そのコレクションの次に存在する要素のインデックスを返します(存在する場合)。そうでない場合、NEXTはNULLを返します。任意のコレクションcについて、c.NEXT(c.LAST)はNULLを返します。
指定されたインデックスは存在している必要はありません。ただし、コレクション c が可変配列であり、インデックスが c.LIMIT を超える場合は、次のようになります:
c.PRIOR(index)はc.LASTを返します。c.NEXT(index)はNULLを返します。
可変配列の例は次のとおりです:
obclient> DECLARE
TYPE var_ty IS VARRAY(10) OF NUMBER;
v_num var_ty := VAR_TY(11,22,33,44,55);
BEGIN
DBMS_OUTPUT.PUT_LINE(NVL(v_num.prior (10), -1));
DBMS_OUTPUT.PUT_LINE(NVL(v_num.next (10), -1));
END;
/
Query OK, 0 rows affected (0.04 sec)
5
-1
ネストテーブルの例は次のとおりです:
DECLARE
TYPE oblist IS TABLE OF VARCHAR(10);
nt OBLIST := oblist('A', 'B', NULL, NULL, 'E', NULL, 'F', 'G', 'H', NULL);
idxt INTEGER;
BEGIN
DBMS_OUTPUT.PUT_LINE('From First to Last Using Next:');
idxt := nt.FIRST;
WHILE idxt IS NOT NULL LOOP
DBMS_OUTPUT.PUT('nt(' || idxt || ') = ');
DBMS_OUTPUT.PUT_LINE(NVL(TO_CHAR(nt(idxt)), 'NULL'));
idxt := nt.NEXT(idxt);
END LOOP;
DBMS_OUTPUT.PUT_LINE('--------------');
DBMS_OUTPUT.PUT_LINE('From Last to First Using Prior:');
idxt := nt.LAST;
WHILE idxt IS NOT NULL LOOP
DBMS_OUTPUT.PUT('nt(' || idxt || ') = ');
DBMS_OUTPUT.PUT_LINE(NVL(TO_CHAR(nt(idxt)), 'NULL'));
idxt := nt.PRIOR(idxt);
END LOOP;
END;
/
Query OK, 0 rows affected
From First to Last Using Next:
nt(1) = A
nt(2) = B
nt(3) = NULL
nt(4) = NULL
nt(5) = E
nt(6) = NULL
nt(7) = F
nt(8) = G
nt(9) = H
nt(10) = NULL
--------------
From Last to First Using Prior:
nt(10) = NULL
nt(9) = H
nt(8) = G
nt(7) = F
nt(6) = NULL
nt(5) = E
nt(4) = NULL
nt(3) = NULL
nt(2) = B
nt(1) = A
上記の例では、それぞれ FIRST と NEXT、LAST と PRIOR を使用して、疎なネストテーブル内のすべての要素を出力します。