0

FROM 句の要素として一括コレクションを使用すると、奇妙な問題が発生します。このコード例を実行すると、実行時に「テーブル名が無効です」というエラーが表示されます。

コレクションをテーブルに置き換えると、すべてうまくいきます。

不足している一括コレクションに関する制限はありますか? FROM 句で匿名ブロックを使用できないのでしょうか? SQL デバッガーでは、l_vol(i) には値がありますが、l_vol(i).FIELD は存在しません。

ありがとう。

 TYPE t_bulk_vol is table of vol%ROWTYPE;
 l_vol t_bulk_vol;
 ...
 cursor cur is SELECT * FROM vol where ... ;

 OPEN CUR;
 LOOP 
     FETCH CUR BULK COLLECT INTO l_vol;
     ....
     insert into dest
     select col1, col2, ... from 
     (inner view with some pivot, unpivot and l_vol(i).FIELD ...) src where l_vol(i).FIELD = src.FIELD;

PS: 元のコードを貼り付けることができません。

4

2 に答える 2

0

あなたが言ったようにタイプを作成しましたが、同じポイントで同じエラーが発生します(ORA-00903 - 無効なテーブル名)。

これは私がやったことの例です:

  CREATE TYPE REC_VOL AS OBJECT (
       FIELD1    VARCHAR2(25),
       ...
  );
  create TYPE T_BULK IS TABLE OF REC_VOL;
  ....
  l_vol t_bulk;
  ...

これは、レコードを収集する方法です (カーソルはもう使用しません)。

    SELECT REC_VOL(FIELD1, ...) BULK COLLECT INTO l_vol
    FROM vol where ...;

例外は、insert-select ステートメントで引き続き発生します。

于 2013-07-12T07:58:29.143 に答える