一、问题描述
项目框架为spring boot,数据库连接使用mybatis,调用函数时报错:自动提交时不允许对作业进行配置。
测试表建表语句:
CREATE TABLE TEST_TABLE
(
TEST1 VARCHAR(10),
TEST_DATE DATETIME(0));
函数:
CREATE OR REPLACE FUNCTION "SYSDBA"."TEST2"("INIT_DATE" IN NUMBER)
RETURN NUMBER
AUTHID DEFINER
as
begin
for jobn in(select job from user_jobs) loop
dbms_job.broken(jobn.job, true);
insert into test_table values('success',sysdate);
commit;
end loop;
return(0);
exception
when others then
insert into test_table values('fail',sysdate);
commit;
return(-1);
rollback;
end test2;
用管理工具测试时执行成功,测试表中插入两条成功数据
而用springboot调用函数时,测试表中插入一条失败数据
查询测试表中结果
报错原因:自动提交时不允许对作业进行配置。
mybatis连接数据库时,会默认设置自动提交,在数据库连接中修改无法覆盖该设置
解决方案
1.单独写连接方法,设置autoCommit为关闭状态
2.在Service层方法上加上事务注解@Transactional,事务在开启时会关闭自动提交,在事务关闭后,开启自动提交。
再次调用后,测试表中插入两条成功数据
达梦官网地址:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台