2016-08-24 27 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の後にsql%bulk_rowcountコレクションを調べて、0行のデータを変更した更新を特定することができます。

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; 
関連する問題