批量插入Oracle

时间:2017-11-20 12:11:58

标签: oracle plsql plsqldeveloper

我有一个表EMPLOYEE,有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:表达式类型错误

该代码适用于BULK COLLECT。

1 个答案:

答案 0 :(得分:4)

t_emp_idRECORD的集合。您需要在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;