Database 使用批量收集将数据追加到表变量中

Database 使用批量收集将数据追加到表变量中,database,oracle,rdbms,Database,Oracle,Rdbms,我试图将数据附加到表变量中。但这种方法正在覆盖数据。我得到的是在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',

我试图将数据附加到表变量中。但这种方法正在覆盖数据。我得到的是在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;

您不需要在这里使用批量收集站。从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;

您可以使用分层查询在不使用循环的情况下执行此操作:

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;
选择注册(
级别+40,
id+39+级别,
0,
"T",,
'08',
0,
00,
'08',
“PAS”,
"散装",,
“散装货物”,
系统时间戳,
系统时间戳
)
批量收集到l_enro
来自双重

CONNECT BY LEVEL@Tans因输入错误而更新,需要使用对象类型进行换行。enrolcols是一个记录。所以l_enro不接受+40级。映射到此位置的列为数字类型。