【技术实现步骤摘要】
一种基于TRY CATCH的数据库异常处理方法和装置
[0001]本专利技术涉及数据库异常处理
,尤其涉及一种基于TRY CATCH的数据库异常处理方法和装置。
技术介绍
[0002]在数据库管理系统中,异常处理是一项至关重要的任务。当出现异常情况时,数据库系统需要能够对异常情况进行及时捕获并及时对捕获的异常情况进行相应的处理,以降低异常情况造成的数据的不一致以及造成的系统不稳定性。
[0003]在实际应用中,现有的异常处理机制对于异常捕获类型的适用性和异常捕获的效率仍然存在很大的改进空间。比如,在PL/pgSQL中引入EXCEPTION来对异常进行处理,它会俘获错误并且从中恢复。当一个错误被EXCEPTION捕获时,PL/pgSQL中该块中所有对数据库状态的修改都会被回滚,例如以下示例:
[0004][0005]当控制到达y:=x/0的地方时,会抛出一个division_by_zero的错误,并被EXCEPTION捕获,但是UPDATE命令在错误发生时同样会被回滚,因此,EXCEPTION没有办法保留 ...
【技术保护点】
【技术特征摘要】
1.一种基于TRY CATCH的数据库异常处理方法,其特征在于,所述方法包括:为PL/pgSQL添加一个TRY CATCH块,将所述添加的TRY CATCH块划分为TRY块和CATCH块;将CATCH块置于PL/pgSQL事务中并开启PL/pgSQL事务;将TRY块置于单独的TRY事务中,开启TRY事务,在TRY事务中的TRY块内执行PL/pgSQL语句;当在TRY事务中的TRY块内执行PL/pgSQL语句失败时,回到PL/pgSQL事务,进入CATCH块执行PL/pgSQL语句。2.根据权利要求1所述的基于TRY CATCH的数据库异常处理方法,其特征在于,在TRY事务中的TRY块内执行PL/pgSQL语句,包括:在TRY事务中的TRY块内获取一条PL/pgSQL语句,当所述获取的PL/pgSQL语句为END TRY语句,提交所述TRY事务,退出当前TRY块并跳过CATCH块的执行;当所述获取的PL/pgSQL语句不是END TRY语句,为获取的PL/pgSQL语句开启一个单独的TRY子事务,在所述TRY子事务中执行所述获取的PL/pgSQL语句。3.根据权利要求2所述的基于TRY CATCH的数据库异常处理方法,其特征在于,当所述获取的PL/pgSQL语句不是END TRY语句,为获取的PL/pgSQL语句开启一个单独的TRY子事务,在所述TRY子事务中执行所述获取的PL/pgSQL语句,包括:当所述获取的PL/pgSQL语句执行成功,提交所述TRY子事务并获取下一条语句;当所述获取的PL/pgSQL语句执行失败,回滚子事务,提交TRY事务并退出TRY块,结束TRY块中PL/pgSQL语句的执行。4.根据权利要求1所述的基于TRY CATCH的数据库异常处理方法,其特征在于,当在TRY事务中的TRY块内执行PL/pgSQL语句失败时,回到PL/pgSQL事务,进入CATCH块执行PL/pgSQL语句,包括:收集TRY事务中的错误信息,根据错误信息生成PL/pgSQL语句执行失败的日志。5.一种基于TRY CATCH的数据库异常处理装置,其特征在于,所述装置包括:PL/pgSQL开启模块,用于为PL/pgSQL添加一个TRY CATCH块,将所述添加的TRY CATCH块划分为TRY...
【专利技术属性】
技术研发人员:李林涛,苏章艳,
申请(专利权)人:广州海量数据库技术有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。