QA@IT
«回答へ戻る

回答を投稿

初期化されていませんので、たとえば以下の様に初期化してあげる必要があります。

declare
    TYPE tA IS RECORD
    (
        A1  CHAR(8)
       ,A2  NUMBER
    );
    TYPE vA       IS VARRAY(3) OF tA;
    TYPE tC       IS VARRAY(3) OF NUMBER;
    TYPE tB  IS RECORD
    (
       B1        CHAR(6)
       ,B2        NUMBER
       ,B3        tC
       ,B4        vA
    );
    TYPE varB     IS TABLE OF tB;
    work          varB  := varB();

begin
    work.EXTEND(1);
    work(1).B1        := '123456';
    work(1).B2        :=  123456;

    work(1).B3 := tC();
    work(1).B3.EXTEND(3);
    work(1).B3(1)     :=  1;
    work(1).B3(2)     :=  2;
    work(1).B3(3)     :=  3;

    work(1).B4 := vA();
    work(1).B4.EXTEND(3);
    work(1).B4(1).A1  := '12345678';
    work(1).B4(1).A2  :=  1;
    work(1).B4(2).A1  := '12345678';
    work(1).B4(2).A2  :=  2;
    work(1).B4(3).A1  := '12345678';
    work(1).B4(3).A2  :=  3;
end;
初期化されていませんので、たとえば以下の様に初期化してあげる必要があります。

```sql
declare
    TYPE tA IS RECORD
    (
        A1  CHAR(8)
       ,A2  NUMBER
    );
    TYPE vA       IS VARRAY(3) OF tA;
    TYPE tC       IS VARRAY(3) OF NUMBER;
    TYPE tB  IS RECORD
    (
       B1        CHAR(6)
       ,B2        NUMBER
       ,B3        tC
       ,B4        vA
    );
    TYPE varB     IS TABLE OF tB;
    work          varB  := varB();

begin
    work.EXTEND(1);
    work(1).B1        := '123456';
    work(1).B2        :=  123456;

	work(1).B3 := tC();
    work(1).B3.EXTEND(3);
    work(1).B3(1)     :=  1;
    work(1).B3(2)     :=  2;
    work(1).B3(3)     :=  3;

	work(1).B4 := vA();
    work(1).B4.EXTEND(3);
    work(1).B4(1).A1  := '12345678';
    work(1).B4(1).A2  :=  1;
    work(1).B4(2).A1  := '12345678';
    work(1).B4(2).A2  :=  2;
    work(1).B4(3).A1  := '12345678';
    work(1).B4(3).A2  :=  3;
end;
```