KingbaseES PLSQL 支持语句级回滚
KingbaseES默认如果在PLSQL-block 执行过程中的任何SQL 语句导致错误,都会导致该事务的所有语句都被回滚,而Oracle 则是语句级的回滚。KingbaseES 为了更好的与 Oracle兼容,新增参数ora_statement_level_rollback 。当 ora_statement_level_rollback 为 on时,表示启用了语句级的回滚。
1、Oracle 与 KingbaseES 的差异
Oracle :在遇到 exception 时,只有触发异常的操作被回滚。
SQL> create table t(id integer); Table created. SQL> begin
2 insert into t values(123);
3 insert into t values('a');
4 exception
5 when others then
6 commit;
7 end;
8 / PL/SQL procedure successfully completed. SQL> select * from t; ID
----------
123
KingbaseES : 未启用语句级回滚。
test=# create table t(id integer);
CREATE TABLE test=# begin
test-# insert into t values(123);
test-# insert into t values('a');
test-# exception
test-# when others then
test-# commit;
test-# end;
test-# /
ANONYMOUS BLOCK test=# select * from t;
id
----
(0 rows)
2、启用语句级回滚
设置语句级回滚后,其行为与oracle 一致。
test=# set ora_statement_level_rollback=on;
SET test=# begin
test-# insert into t values(123);
test-# insert into t values('a');
test-# exception
test-# when others then
test-# commit;
test-# end;
test-# /
ANONYMOUS BLOCK test=# select * from t;
id
-----
123
(1 row)
注意,PLSQL 的语句级回滚只发生在异常被正确捕获的场景下才有效,如果exception 没有被捕获或没有捕获exception,则还是整个事务回滚。如以下例子:
test=# set ora_statement_level_rollback=on; test=# delete from t;
DELETE 1 test=# begin
test-# insert into t values(123);
test-# insert into t values('a');
test-# exception
test-# when no_data_found then
test-# commit;
test-# end;
test-# /
ERROR: invalid input syntax for type integer: "a"
LINE 1: insert into t values('a')
^
QUERY: insert into t values('a')
CONTEXT: PL/SQL function inline_code_block line 3 at SQL statement test=# select * from t;
id
----
(0 rows)
KingbaseES PLSQL 支持语句级回滚的更多相关文章
- kubernetes云平台管理实战: 滚动升级秒级回滚(六)
一.nginx保证有两个版本 1.查看当前容器运行nginx版本 [root@k8s-master ~]# kubectl get pod -o wide NAME READY STATUS REST ...
- 使用shell脚本完成自动化部署及秒级回滚
一.部署机代码目录结构 使用www用户进行代码部署,所有部署机上需要创建www用户,并赋予根目录权限,同时配置公私钥认证建立信任关系. [www@ansible-node1 deploy]$ tree ...
- 【MySQL】使用mysqlbinlog回滚
参考:http://wubx.net/?s=mysqlbinlog mysql官方的mysqlbinlog没有回滚的功能,淘宝大牛对官方代码进行了修改使之能够将binlog中的DML操作变成互逆的语句 ...
- Sql Server 事务/回滚
,'test1','test1') commit tran t1 ---提交事务 功能:实现begin tran 和commit tran之间的语句,任一如果出现错误,所有都不执 事务不是有错就回滚 ...
- 14.5.5.2 Deadlock Detection and Rollback Deadlock 检测和回滚
14.5.5.2 Deadlock Detection and Rollback Deadlock 检测和回滚 InnoDB 自动检测事务死锁和回滚一个事务 InnoDB 尝试挑选小的事务来回滚,事务 ...
- 14.3.5.2 Deadlock Detection and Rollback 死锁检测和回滚:
14.3.5.2 Deadlock Detection and Rollback 死锁检测和回滚: InnoDB 自动检查四艘,回滚一个事务或者事务来打破死锁. InnoDB 试图选择小的事务来回滚, ...
- [SQL]事务回滚详解及示例
存储过程中的 SET XACT_ABORT ON 和事务 在存储过程中写SET XACT_ABORT ON 有什么用? SET XACT_ABORT ON是设置事务回滚的! 当为ON时,如果你存储中的 ...
- SET XACT_ABORT ON [SQL SERVER] 设置事务全部回滚
SET XACT_ABORT ON 设置事务回滚的默认是OFF. 当为ON时,如果你存储中的某个地方出了问题,整个事务中的语句都会回滚为OFF时,只回滚错误的地方
- 当网络中断的时候,JTA全局事务管理,究竟会不会回滚???
前言:有人问了我一个问题,就是说在网络中断的时候,JTA的全局事务管理,会不会回滚?当时说会回滚,但没给对方说清楚理由,也不太认同我的观点.现在总结一下. 今天一天都在看文档(也查了一些博客和网站), ...
- SQL的事务回滚操作带案例分析
SET XACT_ABORT on BEGIN TRAN INSERT INTO [PDA_Action] VALUES ('採购入库1') INSERT INTO [PDA_Action] V ...
随机推荐
- Swoole从入门到入土(6)——TCP服务器[粘包]
在了解Swoole下如何处理粘包问题之前,我们需要先了解什么是"粘包".我们以下面这张图进行普及: 假设客户端分别发送了两个数据包D1和D2给服务端,由于服务端一次读取到的字节数是 ...
- bootstrap与javascript
1.bootstrap依赖 bootstrap依赖javascript类库,jQuery 下载jQuery,在页面上应用jQuery 在页面上应用bootstrap的js类库 <script s ...
- IDA 反汇编 explorer
之前写过一篇关于 IDA 在无 dmp 文件下如何定位到崩溃点的文章,由于其中涉及到公司项目,就仅限自己看了 正好今天看到一篇关于火绒软件误杀 explorer 的文章,并且有相关的复现过程 文章已经 ...
- Mqtt开发笔记:Mqtt服务器搭建
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- context讲解
context包 context包介绍 在go语言中,每个独立调用一般都会被单独的协程处理.但在处理一个请求时,往往可能需要在多个协程之间进行信息传递,甚至包括一层层地递进顺序传递,而且这种信息往 ...
- 【Azure Logic App】使用Outlook.com发送邮件遇到429报错
问题描述 在Logic App中使用 Outlook.com组件发送邮件,遇见了outlook connection报429的错误 {"error":{"code&quo ...
- Hugo 建站经验之谈
前言 建站工具,早已不是一个新颖的话题,抛开可视化建站单论开发层面,各类语言都有推出广受欢迎的建站框架,比如 Python 开发的 Pelican,JavaScript 开发的 Hexo,以及市场份额 ...
- 记录: OpenAI中转代理API接口服务的使用
由于OpenAI提供服务的地区列表里没有 China,因此想要方便使用OpenAI API的话就需要用到中转服务. 本文介绍的iDataRiver平台便提供这样的API,且比官方OpenAI还要便宜, ...
- InputRegZen.vue 正则Input 限制输入框输入内容
核心内容 已经 perfect,没有用外库,原生完成 用的 iview的Input组件 封装 // InputRegZen.vue <template> <div> <I ...
- base-table 加入动态slot 流程 vue2
columns { title: '字段标题', slot: 'yourSlotName', minWidth: 50, align: 'center' }, 组件内 props: { columns ...