2016-02-18 61 views
0

我试图将数据追加到表变量中。但是这种方法覆盖了数据。而且,我得到的值是,i = 50。有什么办法可以用来在for循环中追加数据。请帮助使用批量收集将数据追加到表变量

TYPE employee_info_t IS TABLE OF enrolcols; 
l_enro employee_info_t:=employee_info_t(); 

FOR i IN 40..50 
    LOOP 
select i+1,id + i , 
     0, 
     'T', 
     '08', 
     0, 
     00, 
     '08', 
     'PAS', 
     'BULK', 
     'BULKLOAD', 
     system_timestamp, 
     system_timestamp bulk collect into l_enro from dual; 
end loop; 

回答

0

您不需要在此处使用批量收集统计。从sql加载集合时使用批量收集。 如果我打开你的代码,你想在plsql中填充集合。尝试类似的东西。

TYPE employee_info_t IS TABLE OF enrolcols; 
l_enro employee_info_t:=employee_info_t(); 
FOR i IN 40..50 
    LOOP 
    l_enro.extend(1); 
    l_enro(l_enro.COUNT) := enrolcols(i+1,id + i , 
          0, 
          'T', 
          '08', 
          0, 
          00, 
          '08', 
          'PAS', 
          'BULK', 
          'BULKLOAD', 
          system_timestamp, 
          system_timestamp); 
end loop; 
0

你能做到不使用分层查询循环:

select enrolcols(
     LEVEL+40, 
     id + 39 + LEVEL, 
     0, 
     'T', 
     '08', 
     0, 
     00, 
     '08', 
     'PAS', 
     'BULK', 
     'BULKLOAD', 
     system_timestamp, 
     system_timestamp 
     ) 
bulk collect into l_enro 
from dual 
CONNECT BY LEVEL <= 11; 
+0

数字或值错误即将 – Tanul

+0

@Tans更新的一个错字,需要与对象类型来包装。 – MT0

+0

enrolcols是一个记录。所以l_enro不接受Level + 40。映射到此位置的列是数字类型。 – Tanul