2017-11-20 20 views
0

나는 emp_id (1 : 4800)와 status (모든 레코드에 대해 0)라는 두 개의 열이있는 4800 개의 레코드가있는 테이블 직원을 보유하고 있습니다. 1,000 레코드를 1 모든 해당 상태의 상태가 설정되어 수집 그래서 대부분을 구현하고 은 제한 1000 수집이Oracle과 함께 벌크 삽입물

update employee set status=2 where emp_id=t_emp_id.emp_id(i); 
에서

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; 
/

I 오류가 점점 오전 내 코드입니다

PLS-00382 : 표현

코드가 바로 BULK 수집을 위해 잘 작동 잘못된 타입이다.

+3

왜 그렇게 복잡이 문

update employee set status=2 where emp_id=t_emp_id(i); 

변경? 단일 업데이트 문을 사용하지 않는 이유는 무엇입니까? – ibre5041

답변

4

t_emp_idRECORD입니다. 열의 값을 i 번째 색인으로 가져와야합니다.

update employee set status=2 where emp_id=t_emp_id(i).emp_id;