使用 Oracle 批量插入
Bulk Inserts with Oracle
我有一个 Table 雇员,有 4800 条记录,有两列 emp_id (1:4800) 和状态(所有记录为 0)。
我正在实施限制为 1000 的批量收集,因此对于每 1000 条收集的记录,所有相应状态的状态都设置为 1。
这是我的代码
declare
TYPE bulk_emp_id is table of employee%rowtype;
t_emp_id bulk_emp_id := bulk_emp_id();
cursor c_emp is
select * from employee;
begin
open c_emp;
loop
fetch c_emp
bulk collect into t_emp_id limit 1000;
exit when t_emp_id.count=0;
forall i in t_emp_id.first..t_emp_id.last
update employee set status=2 where emp_id=t_emp_id(i);
COMMIT;
DBMS_OUTPUT.put_line(t_emp_id.count || ' rows');
end loop;
close c_emp;
end;
/
我在
遇到错误
update employee set status=2 where emp_id=t_emp_id.emp_id(i);
PLS-00382: expression is of wrong type
该代码仅适用于 BULK COLLECT。
t_emp_id
是 RECORD
的集合。您需要获取第 i
个索引处的列的值。更改此声明
update employee set status=2 where emp_id=t_emp_id(i);
至
update employee set status=2 where emp_id=t_emp_id(i).emp_id;
我有一个 Table 雇员,有 4800 条记录,有两列 emp_id (1:4800) 和状态(所有记录为 0)。 我正在实施限制为 1000 的批量收集,因此对于每 1000 条收集的记录,所有相应状态的状态都设置为 1。 这是我的代码
declare
TYPE bulk_emp_id is table of employee%rowtype;
t_emp_id bulk_emp_id := bulk_emp_id();
cursor c_emp is
select * from employee;
begin
open c_emp;
loop
fetch c_emp
bulk collect into t_emp_id limit 1000;
exit when t_emp_id.count=0;
forall i in t_emp_id.first..t_emp_id.last
update employee set status=2 where emp_id=t_emp_id(i);
COMMIT;
DBMS_OUTPUT.put_line(t_emp_id.count || ' rows');
end loop;
close c_emp;
end;
/
我在
遇到错误update employee set status=2 where emp_id=t_emp_id.emp_id(i);
PLS-00382: expression is of wrong type
该代码仅适用于 BULK COLLECT。
t_emp_id
是 RECORD
的集合。您需要获取第 i
个索引处的列的值。更改此声明
update employee set status=2 where emp_id=t_emp_id(i);
至
update employee set status=2 where emp_id=t_emp_id(i).emp_id;