-1

私はpl/sqlでコードをデバッグしようとしていますが、混乱しているのは、コーダーが「binary_integerによるインデックス」でさえも、インデックス作成方法について言及していないことです。もしそうなら、テーブル?

4

1 に答える 1

1

その完全に可能です。あなたが説明しているものは、ネストされたテーブルと呼ばれます。「index by」を使用すると、これは連想配列 (スパース) テーブルになります。

ネストされたテーブルでは、インデックスは 1 から始まり、要素ごとに 1 ずつ増加します。

例: ネストされたテーブル型:

SQL> declare
  2    type mytyp is table of number;
  3    v_t mytyp;
  4  begin
  5    v_t := mytyp (1,2,3,4);
  6    dbms_output.put_line(v_t(1));
  7    dbms_output.put_line(v_t(4));
  8  end;
  9  /
1
4

それらを割り当てる方法には、他にも違いがあります。ネストされたテーブルは 1 から始まり、割り当てる前に初期化する必要があります

たとえば、これはネストされたテーブルで失敗します:

SQL> declare
  2    type mytyp is table of number;
  3    v_t mytyp;
  4  begin
  5    v_t(1) := 1;
  6  end;
  7  /
declare
*
ERROR at line 1:
ORA-06531: Reference to uninitialized collection
ORA-06512: at line 5

初期化する必要があるため、要素を持つように拡張します。

SQL> declare
  2    type mytyp is table of number;
  3    v_t mytyp;
  4  begin
  5    v_t := mytyp();
  6    v_t.extend;
  7    v_t(1) := 1;
  8  end;
  9  /

PL/SQL procedure successfully completed.

連想配列で自由にできるように添字をランダムに割り当てようとすると、ネストされたテーブルがまばらに入力されていないため、 itr は失敗します。

SQL> declare
  2    type mytyp is table of number;
  3    v_t mytyp;
  4  begin
  5    v_t := mytyp();
  6    v_t(2) := 1;
  7  end;
  8  /
declare
*
ERROR at line 1:
ORA-06533: Subscript beyond count
ORA-06512: at line 6
于 2013-04-04T07:16:36.153 に答える