2016-08-24 10 views
0

테이블에서 많은 레지스터를 업데이트하기 위해 FORALL 문을 사용하고 있는데, 부서 번호 XXX가 없기 때문에 업데이트가 "실패"하면 예외를 잡아야합니다.Oracle FORALL 업데이트 예외

FORALL x IN TABLE_DEPTO_DESCRIPTION.First .. TABLE_DEPTO_DESCRIPTION.Last SAVE EXCEPTIONS 
    UPDATE DEPARTMENTS SET 
     DESCRIPTION = TABLE_DEPTO_DESCRIPTION(x).DESCRIPTION 
    WHERE DPTO_NUMBER =TABLE_DEPTO_DESCRIPTION(x).id; 

답변

1

행을 업데이트하지 않는 업데이트 문은 오류가 아니므로 잡을 예외가 없습니다. FORALL 데이터의 0 행을 수정 한 업데이트를 식별 한 후에는 sql%bulk_rowcount 수집을 검사 할 수

FORALL ... 

FOR i IN 1 .. SQL%BULK_ROWCOUNT.count 
LOOP 
    IF(sql%bulk_rowcount(i) = 0) 
    THEN 
    -- TABLE_DEPTO_DESCRIPTION(i).id updated 0 rows. 
    -- Do something as a result 
    END IF; 
END LOOP;