Lightdb23.3版本开始,对函数功能进行了加强,原生支持了rollback和commit。
1. 函数内commit,提交之前的dml等sql语句已提交生效。
2. 函数内rollback,返回值有效,rollback之前执行的dml等sql语句均已回滚。
以下为示例:
--建立一张测试表
create table table_func_rbk(a int, b int);
--插入两条数据
insert into table_func_rbk values(100,100);
insert into table_func_rbk values(200,200);
--查询该表,2条数据
select * from table_func_rbk order by a;
--创建一个测试函数
create or replace function func_rollback1(a int) return int
is
begin
--插入一条数据
insert into table_func_rbk values(300,300);
--提交,该条数据有效
commit;
--插入一条数据
insert into table_func_rbk values(400,400);
--回滚,该条数据无效
rollback;
--修改a值为400的数据改为300
update table_func_rbk set a = 400 where a = 300;
--回滚,修改无效
rollback;
--删除a值为100的数据
delete from table_func_rbk where a = 100;
--回滚,
rollback;
--回滚,删除无效
return a;
end;
/
--执行该函数
select func_rollback1(100);
--预期3条数据
select * from table_func_rbk order by a;
create or replace function func_rollback1(a int) return int
is
begin
--插入一条错误数据,使其进到异常中
insert into table_func_rbk values('asdasda');
exception
when others then
--插入一条数据
insert into table_func_rbk values(300,300);
--提交,该条数据有效
commit;
--插入一条数据
insert into table_func_rbk values(400,400);
--回滚,该条数据无效
rollback;
--修改a值为400的数据改为300
update table_func_rbk set a = 400 where a = 300;
--回滚,修改无效
rollback;
--删除a值为100的数据
delete from table_func_rbk where a = 100;
--回滚,
rollback;
--回滚,删除无效
return a;
end;
/
--执行该函数
select func_rollback1(100);
--预期4条数据
select * from table_func_rbk order by a;
--删除该表
drop table table_func_rbk;
--删除该函数
drop function func_rollback1;
通过以上的例子可以清晰的了解函数提交与回滚的使用。
详细语法可参考LightDB官网查看: