更新时,会弹出限制错误。您需要确定更新在哪条记录上捕获了错误。我不能将此条目传递给异常块,因为它发誓:
必须声明标识符“CUR.CSRES_RESOLUTION_ID”
我了解循环已关闭。在那种情况下如何转移CSRES_RESOLUTION_ID异常?
DECLARE
err_code VARCHAR2(100);
BEGIN
FOR CUR IN (
SELECT a.csres_resolution_id FROM CS_RESOLUTION A
WHERE A.CSRES_RESOLUTION_NUMBER IN ('0356040','0356043','0356044')
) LOOP
UPDATE CS_CASE B
SET B.DCCST_CASE_STATUS_CODE='CLOSED BY PAYMENT'
WHERE B.csres_resolution_id =CUR.csres_resolution_id;
END LOOP;
COMMIT;
EXCEPTION WHEN OTHERS THEN
err_code := SQLCODE;
dbms_output.put_line(err_code||' '||CUR.csres_resolution_id );
END;
此任务不需要循环,请使用
FORALL. 使用SAVE EXCEPTIONS谓词,所有异常都将保存到数组中。该数组的元素属性是以异常结束的子句的 DML 索引。
SQL%BULK_EXCEPTIONSSQL%BULK_EXCEPTIONS(iх).ERROR_INDEX问题中的块示例:
鉴于需要向所有记录输出错误的注释,应将异常处理移至循环本身:
如果有必要为任何错误回滚整个事务,则可能值得创建一个变量 - 一个错误的标志,并且仅在未设置时提交。