0

コンパイルされません。どうしたの?

TYPE recEniFlussiHub IS RECORD
      (
         FLVO_ID                 dbms_sql.varchar2_table,
         flh_id_messaggio        dbms_sql.varchar2_table,
         flh_integrazione_id     dbms_sql.varchar2_table
      );

      TYPE taof_RowCurEniFlussiHub IS TABLE OF recEniFlussiHub;

      curEniFlussiHub        taof_RowCurEniFlussiHub;


      SELECT null FLVO_ID, 
             c.flh_id_messaggio,
             c.flh_integrazione_id,        
        BULK COLLECT INTO curEniFlussiHub
        FROM ENI_FLUSSI_HUB c
       WHERE     c.flh_fornitura = P_FLH_FORNITURA
4

2 に答える 2

1

レコードでネストされたテーブルを使用する場合は、BULKCOLLECT句でそれらの要素を参照する必要があります。このようなもの:

  SELECT null FLVO_ID,   
         c.flh_id_messaggio,  
         c.flh_integrazione_id        
    BULK COLLECT INTO curEniFlussiHub.FLVO_ID
              ,   curEniFlussiHub.flh_id_messaggio        
              ,   curEniFlussiHub.flh_integrazione_id
    FROM ENI_FLUSSI_HUB c  
   WHERE     c.flh_fornitura = P_FLH_FORNITURA  

また、変数をレコードのインスタンスとして定義する必要があります。追加のテーブルタイプは必要ありません。

declare
    recEniFlussiHub IS RECORD 
      ( 
         FLVO_ID                 dbms_sql.varchar2_table, 
         flh_id_messaggio        dbms_sql.varchar2_table, 
         flh_integrazione_id     dbms_sql.varchar2_table 
     ); 

  curEniFlussiHub        recEniFlussiHub;    
于 2012-07-17T09:24:36.303 に答える
1

レコード型を正しく宣言していません (列flh_id_messaggioを想定しておりflh_integrazione_id、それ自体がネストされたテーブルではありません)。

選択した値を保持する連想配列を作成する場合、各フィールド自体がコレクションである必要はありません (select ステートメントの後に余分なカンマがありましたc.flh_integrazione_id)。

(あなたがそれを として宣言しようとしたので、あなたflvo_idが であると仮定しました。それが である場合は、レコード宣言でそのように宣言します)。VARCHAR2VARCHAR2_TABLENUMBER

TYPE receniflussihub IS RECORD(
     flvo_id                 VARCHAR2,
     flh_id_messaggio        eni_flussi_hub.flh_id_messaggio%TYPE,
     flh_integrazione_id     eni_flussi_hub.flh_integrazione_id%TYPE
);

TYPE taof_rowcureniflussihub IS TABLE OF receniflussihub;


cureniflussihub  taof_rowcureniflussihub;

SELECT NULL flvo_id,
       c.flh_id_messaggio,
       c.flh_integrazione_id
  BULK COLLECT INTO cureniflussihub
  FROM eni_flussi_hub C
 WHERE c.flh_fornitura = p_flh_fornitura;

ここを見る

それが役に立てば幸い...

編集:

あなたのコメントから、(レコードのコレクションではなく) コレクションのレコードを選択する必要がある場合は、テーブル TYPE を宣言する必要はありません。あなたのコードでc.flh_integrazione_idは、selectステートメントの後にまだ余分なコンマがありました):

これを試して:

TYPE receniflussihub IS RECORD(
     flvo_id                 dbms_sql.varchar2_table,
     flh_id_messaggio        dbms_sql.varchar2_table,
     flh_integrazione_id     dbms_sql.varchar2_table
);

receniflussihub_rec receniflussihub;

SELECT NULL flvo_id,
       c.flh_id_messaggio,
       c.flh_integrazione_id
  BULK COLLECT INTO receniflussihub_rec.flvo_id,
                    receniflussihub_rec.flh_id_messaggio,
                    receniflussihub_rec.flh_integrazione_id
  FROM eni_flussi_hub C
 WHERE c.flh_fornitura = p_flh_fornitura;
于 2012-07-17T09:12:53.463 に答える