一种基于TRYCATCH的数据库异常处理方法和装置制造方法及图纸

技术编号:38858791 阅读:16 留言:0更新日期:2023-09-17 10:02
本发明专利技术涉及数据库异常处理技术领域,提供一种基于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语句。根据本发明专利技术的示例性实施例,本发明专利技术可以改善数据库管理系统中PL/pgSQL的异常处理能力,使开发人员能够更加灵活地处理错误情况,提高系统的可靠性和容错性。性。性。

【技术实现步骤摘要】
一种基于TRY CATCH的数据库异常处理方法和装置


[0001]本专利技术涉及数据库异常处理
,尤其涉及一种基于TRY CATCH的数据库异常处理方法和装置。

技术介绍

[0002]在数据库管理系统中,异常处理是一项至关重要的任务。当出现异常情况时,数据库系统需要能够对异常情况进行及时捕获并及时对捕获的异常情况进行相应的处理,以降低异常情况造成的数据的不一致以及造成的系统不稳定性。
[0003]在实际应用中,现有的异常处理机制对于异常捕获类型的适用性和异常捕获的效率仍然存在很大的改进空间。比如,在PL/pgSQL中引入EXCEPTION来对异常进行处理,它会俘获错误并且从中恢复。当一个错误被EXCEPTION捕获时,PL/pgSQL中该块中所有对数据库状态的修改都会被回滚,例如以下示例:
[0004][0005]当控制到达y:=x/0的地方时,会抛出一个division_by_zero的错误,并被EXCEPTION捕获,但是UPDATE命令在错误发生时同样会被回滚,因此,EXCEPTION没有办法保留产生错误语句之前的对数据库的持久性更改。
[0006]因此,如何提供一种更加高效和灵活的数据库异常处理方法,成为亟待解决的技术问题。

技术实现思路

[0007]有鉴于此,为了克服现有技术的不足,本专利技术旨在提供一种基于TRY CATCH的数据库异常处理方法和装置。
[0008]首先,本专利技术提供一种基于TRY CATCH的数据库异常处理方法,包括:
[0009]为PL/pgSQL添加一个TRY CATCH块,将所述添加的TRY CATCH块划分为TRY块和CATCH块;
[0010]将CATCH块置于PL/pgSQL事务中并开启PL/pgSQL事务;
[0011]将TRY块置于单独的TRY事务中,开启TRY事务,在TRY事务中的TRY块内执行PL/pgSQL语句;
[0012]当在TRY事务中的TRY块内执行PL/pgSQL语句失败时,回到PL/pgSQL事务,进入CATCH块执行PL/pgSQL语句。
[0013]作为本专利技术的优选,本专利技术基于TRY CATCH的数据库异常处理方法中,在TRY事务中的TRY块内执行PL/pgSQL语句,包括:
[0014]在TRY事务中的TRY块内获取一条PL/pgSQL语句,当所述获取的PL/pgSQL语句为END TRY语句,提交所述TRY事务,退出当前TRY块并跳过CATCH块的执行;
[0015]当所述获取的PL/pgSQL语句不是END TRY语句,为获取的PL/pgSQL语句开启一个单独的TRY子事务,在所述TRY子事务中执行所述获取的PL/pgSQL语句。
[0016]作为本专利技术的优选,本专利技术基于TRY CATCH的数据库异常处理方法中,当所述获取的PL/pgSQL语句不是END TRY语句,为获取的PL/pgSQL语句开启一个单独的TRY子事务,在所述TRY子事务中执行所述获取的PL/pgSQL语句,包括:
[0017]当所述获取的PL/pgSQL语句执行成功,提交所述TRY子事务并获取下一条语句;
[0018]当所述获取的PL/pgSQL语句执行失败,回滚子事务,提交TRY事务并退出TRY块,结束TRY块中PL/pgSQL语句的执行。
[0019]作为本专利技术的优选,本专利技术基于TRY CATCH的数据库异常处理方法中,当在TRY事务中的TRY块内执行PL/pgSQL语句失败时,回到PL/pgSQL事务,进入CATCH块执行PL/pgSQL语句,包括:收集TRY事务中的错误信息,根据错误信息生成PL/pgSQL语句执行失败的日志。
[0020]其次,本专利技术提供一种基于TRY CATCH的数据库异常处理装置,包括:
[0021]PL/pgSQL开启模块,用于为PL/pgSQL添加一个TRY CATCH块,将所述添加的TRY CATCH块划分为TRY块和CATCH块,将CATCH块置于PL/pgSQL事务中并开启PL/pgSQL事务。将TRY块置于单独的TRY事务中,开启TRY事务;
[0022]PL/pgSQL执行模块,用于在TRY事务中的TRY块内执行PL/pgSQL语句,当在TRY事务中的TRY块内执行PL/pgSQL语句失败时,回到PL/pgSQL事务,进入CATCH块执行PL/pgSQL语句。
[0023]作为本专利技术的优选,本专利技术装置中的PL/pgSQL执行模块,具体用于:
[0024]在TRY事务中的TRY块内获取一条PL/pgSQL语句,当所述获取的PL/pgSQL语句为END TRY语句,提交所述TRY事务,退出当前TRY块并跳过CATCH块的执行;
[0025]当所述获取的PL/pgSQL语句不是END TRY语句,为获取的PL/pgSQL语句开启一个单独的TRY子事务,在所述TRY子事务中执行所述获取的PL/pgSQL语句。
[0026]作为本专利技术的优选,当所述获取的PL/pgSQL语句不是END TRY语句,在为获取的PL/pgSQL语句开启一个单独的TRY子事务后,本专利技术装置中的PL/pgSQL执行模块,具体用于:
[0027]当所述获取的PL/pgSQL语句执行成功,提交所述TRY子事务并获取下一条语句;
[0028]当所述获取的PL/pgSQL语句执行失败,回滚子事务,提交TRY事务并退出TRY块,结束TRY块中PL/pgSQL语句的执行。
[0029]作为本专利技术的优选,当在TRY事务中的TRY块内执行PL/pgSQL语句失败时,本专利技术装置的PL/pgSQL执行模块还用于:收集TRY事务中的错误信息,根据错误信息生成PL/pgSQL语句执行失败的日志。
[0030]再者,本专利技术提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机
程序被执行时,执行上述的基于TRY CATCH的数据库异常处理方法。
[0031]最后,本专利技术还提供一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现上述基于TRY CATCH的数据库异常处理方法。
[0032]本专利技术基于TRY CATCH的数据库异常处理方法和装置,通过在PL/pgSQL中声明TRY CATCH,使TRY块位于单独的TRY事务中,CATCH块位于PL/pgSQL的事务中,在执行TRY块中的每条语句前,会为这条语句开启一个子事务,当这条语句执行完后会提交这个子事务,当这条语句出错则会回滚这个子事务,在子事务中执行语句可以不影响其他语句的状态,从而可以改善数据库管理系统中PL/pgSQL的异常处理能力,使开发人员能够更加灵活地处理错误情况,提高系统的可靠性和容错性。
附图说明
[0033]为了更清楚地说明本专利技术实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本本文档来自技高网
...

【技术保护点】

【技术特征摘要】
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...

【专利技术属性】
技术研发人员:李林涛苏章艳
申请(专利权)人:广州海量数据库技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1