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

您错误地声明了您的记录类型(我假设您的列flh_id_messaggio并且flh_integrazione_id它们本身不是嵌套表)。

如果您正在创建一个关联数组来保存选定的值,则每个字段本身不必是一个集合(并且您在 select 语句之后有一个额外的逗号c.flh_integrazione_id):

(我假设你flvo_id是 a VARCHAR2,因为你试图将它声明为 a VARCHAR2_TABLE,如果它是 aNUMBER然后在你的记录声明中声明它)。

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,只需声明您的 decald 记录类型的记录并选择该记录(不要忘记在您的代码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 回答
1

如果要在记录中使用嵌套表,则需要在 BULK COLLECT 子句中引用它们的元素。像这样的东西:

  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 回答