0

テーブルから多くのレジスタを更新するために FORALL ステートメントを使用しています。部門番号 XXX が存在しないために更新が「失敗」したときに例外をキャッチする必要があります。

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

1 に答える 1

1

行を更新しない update ステートメントはエラーではないため、キャッチする例外はありません。sql%bulk_rowcountの後にコレクションを調べて、FORALL0 行のデータを変更した更新を特定できます。

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;
于 2016-08-24T22:53:24.780 に答える