Oracle FORALL更新异常



我使用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;

不更新行的update语句不是错误,因此不需要捕获异常。您可以在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;

相关内容

  • 没有找到相关文章

最新更新