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

不更新任何行的更新语句不是错误,因此不会捕获异常。您可以在 之后检查sql%bulk_rowcount集合FORALL以识别修改 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;
于 2016-08-24T22:53:24.780 回答