首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ecpg中的错误(sqlca.sqlcode == ECPG_DUPLICATE_KEY)处理

Ecpg中的错误(sqlca.sqlcode == ECPG_DUPLICATE_KEY)处理
EN

Stack Overflow用户
提问于 2022-09-30 14:43:18
回答 1查看 47关注 0票数 0

在向表中插入记录时需要处理错误(Ecpg PostgreSQL),但是如果任何重复的记录(主键).Job应该跳过并继续下一步,则作业不应该中止/提交/回滚。

代码语言:javascript
复制
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)"

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-30 16:07:12

这就是PostgreSQL的工作方式:如果事务中的语句失败,事务将被中止,所有后续语句都将失败。

因此,在尝试下一个SQL语句之前,您应该先进行EXEC SQL ROLLBACK

如果不想回滚整个事务,可以在执行“危险”SQL语句之前设置保存点:

代码语言:javascript
复制
SAVEPOINT sname

然后,当关键部分结束时,您可以释放保存点:

代码语言:javascript
复制
RELEASE SAVEPOINT sname

如果遇到错误,则可以在设置保存点后回滚所有内容,包括该错误。

代码语言:javascript
复制
ROLLBACK TO SAVEPOINT sname

请注意,如果您想要获得良好的性能,则应该谨慎地使用保存点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73910441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档