EXTEND

EXTEND
EXTENDプロシージャは配列などのコレクションの要素をnullで初期化します。
以下、例です。


実行
CREATE OR REPLACE PROCEDURE TEST
IS
    TYPE ARR IS VARRAY(5) OF NUMBER(12,0);
    WK_ARR ARR := ARR();
BEGIN
WK_ARR.EXTEND;
WK_ARR(1) := 123;

FOR i IN 1..1 LOOP
    DBMS_OUTPUT.PUT_LINE(WK_ARR(i));
END LOOP;

END;
/
配列はARR()コンストラクタで初期化されていますが要素は初期化されていません。
そのため、WK_ARR.EXTENDで最初の要素をnullで初期化しています。
もし、初期化しない場合、WK_ARR(1)に値を入れる行でエラーが発生します。


実行結果
4
EXTEND(n)
EXTENDの引数に数値を渡すとその数だけコレクション要素を初期化してくれます。
コレクション要素外までEXTENDの引数を指定するとエラーとなります。


実行
CREATE OR REPLACE PROCEDURE TEST
IS
    TYPE ARR IS VARRAY(3) OF NUMBER(12,0);
    WK_ARR ARR := ARR();
BEGIN
   WK_ARR.EXTEND(3);
   WK_ARR(1) := 123;
   WK_ARR(2) := 456;
   WK_ARR(3) := 789;

FOR i IN 1..3 LOOP
    DBMS_OUTPUT.PUT_LINE(WK_ARR(i));
END LOOP;

END;
/
配列要素をEXTEND(3)で全て初期化しています。
その後、配列に値を格納して表示しています。
この時、コレクション要素外までEXTENDの引数を指定するとエラーとなります。


実行結果
123
456
789
EXTEND(n,m)
EXTEND(n,m)とするとm番目のコレクション要素をn個の要素にコピーして初期化します。
以下、例です。


実行
CREATE OR REPLACE PROCEDURE TEST
IS
    TYPE ARR IS VARRAY(5) OF NUMBER(12,0);
    WK_ARR ARR := ARR();
BEGIN
WK_ARR.EXTEND(3);
WK_ARR(1) := 123;
WK_ARR(2) := 456;
WK_ARR(3) := 789;
WK_ARR.EXTEND(2,1);
FOR i IN 1..5 LOOP
    DBMS_OUTPUT.PUT_LINE(WK_ARR(i));
END LOOP;

END;
/
配列要素をEXTEND(3)で最初の3要素を初期化し、配列に値を格納しています。
その後、WK_ARR.EXTEND(2,1)とすることにより、1番目の要素の値を4,5番目の要素にコピーしています。
以下、実行結果です。


実行結果
123
456
789
123
123

初版2008/02/07 :最終更新2008/02/07
HOME