即使在 PL/SQL 中发生异常,也继续循环读取 excel 行
Posted
技术标签:
【中文标题】即使在 PL/SQL 中发生异常,也继续循环读取 excel 行【英文标题】:Continue loop in reading excel rows even when an exception occurred in PL/SQL 【发布时间】:2014-08-22 08:56:01 【问题描述】:以下是代码概览:
PROCEDURE
BEGIN
WHILE LOOP --loop each row
--Read each row and add in table
COMMIT;
END LOOP;
EXCEPTION
WHEN OTHERS
--log error
ROLLBACK;
END;
例如:有 5 行。第 3 行有错误。程序在读取错误行后立即停止,使其旁边的其他行不被评估/读取。我的目标是在它出现异常后,它将输出该行并继续读取其他行。那么如果出现异常,我该如何返回循环呢?
【问题讨论】:
将你的这些行放在一个单独的begin end
块中,并使用它自己的异常处理程序 (begin exception end
)。您没有解释您是如何准确读取这些 Excel 行的,但通常带有 log errors
(10gR2 及更高版本) 子句的 insert into .. select
语句就足够了,除非您执行一些在纯 SQL 中无法完成的复杂转换。
【参考方案1】:
试试这个,然后你将只在内部匿名块中缓存错误:
PROCEDURE
BEGIN
WHILE LOOP --loop each row
BEGIN
--Read each row and add in table
COMMIT;
EXCEPTION
WHEN OTHERS
--log error
ROLLBACK;
END;
END LOOP;
END;
【讨论】:
【参考方案2】:尝试在循环本身中使用独立的 PL/SQL 块。
BEGIN
WHILE LOOP --loop each row
BEGIN
--Read each row and add in table
COMMIT;
EXCEPTION --Catch the exception here and print the data and it will move on
END;
END LOOP;
EXCEPTION
WHEN OTHERS
--log error
ROLLBACK;
END;
【讨论】:
没有任何文本,这样的答案会出现在低质量审核队列中。这意味着您的答案有被删除的风险。我对这个主题一无所知,所以我无法确定它是否质量低下,但我建议您添加一小段内容,说明与您的代码和 OP 帖子的不同之处。最好解释一下为什么这个有效而另一个无效。 感谢您指出这一点,堆栈溢出也问我这个问题。但这对相关观众来说是非常不言自明的。无论如何,考虑到这里的人的质量,我不确定在不看答案质量的情况下,缺少的答案是否值得投反对票。但事不宜迟,我将对此进行编辑。以上是关于即使在 PL/SQL 中发生异常,也继续循环读取 excel 行的主要内容,如果未能解决你的问题,请参考以下文章