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