在向表中插入记录时需要处理错误(Ecpg PostgreSQL),但是如果任何重复的记录(主键).Job应该跳过并继续下一步,则作业不应该中止/提交/回滚。
Note:SQL_CODE = sqlca.sqlcode
if ( SQL_CODE == -403 ) Other Way (sqlca.sqlcode == ECPG_DUPLICATE_KEY)
{
Log_error_tab();
}
else if ( SQL_CODE != SQL_SUCCESS )
{
Job_fail();
}如果我将像上面一样通过调用函数Log_error_tab(),来处理错误,但是它在下一次错误操作中失败,即“sqlerrm.sqlerrmc:当前事务被中止”,则忽略命令直到事务块在线结束(sqlstate: 25P02)"
发布于 2022-09-30 16:07:12
这就是PostgreSQL的工作方式:如果事务中的语句失败,事务将被中止,所有后续语句都将失败。
因此,在尝试下一个SQL语句之前,您应该先进行EXEC SQL ROLLBACK。
如果不想回滚整个事务,可以在执行“危险”SQL语句之前设置保存点:
SAVEPOINT sname然后,当关键部分结束时,您可以释放保存点:
RELEASE SAVEPOINT sname如果遇到错误,则可以在设置保存点后回滚所有内容,包括该错误。
ROLLBACK TO SAVEPOINT sname请注意,如果您想要获得良好的性能,则应该谨慎地使用保存点。
https://stackoverflow.com/questions/73910441
复制相似问题