代码语言:ja vascript
复制
begin
insert into t_ds_process_task_relation_log (...) values (...);
end;
sql
代码语言:ja vascript
复制
begin
insert into t_ds_process_task_relation(...) values(...);
insert into t_ds_process_task_relation(...) values(...);
insert into t_ds_process_task_relation(...) values(...);
end;
一个极易踩坑的点:**begin … end 块无返回值(或固定返回 -1)**。这意味着无法通过传统方式获取“受影响行数”。若业务逻辑依赖插入结果校验或行数统计,此方法并不适用。
代码语言:ja vascript
复制
insert all
into t_ds_process_task_relation_log (...) values (...)
select ${taskRelationList.size} from dual
sql
代码语言:ja vascript
复制
insert all
into t_ds_process_task_relation(...) values(...)
into t_ds_process_task_relation(...) values(...)
select 2 from dual
尾部的`select … from dual`是整个INSERT ALL语句的“驱动行数”来源,**最终返回值由该SELECT语句的行数决定**。如需精确获取总影响行数,可通过调整`select`的返回行数间接控制。
其他方式(未使用Mybatis验证)
除上述Mybatis框架内的实现外,Oracle原生还支持通过`INSERT INTO … SELECT … UNION ALL`组合完成批量插入。
代码语言:ja vascript
复制
-- 创建测试表
create table t_demo(tno NUMBER(3), tname VARCHAR2(30), flag VARCHAR2(20));
-- 插入数据
insert into t_demo(tno, tname, flag)
select * from (
select 11 tno, '张三1' tname, '1' flag from dual
union
select 12 tno, '张三2' tname, '1' flag from dual
union
select 13 tno, '张三3' tname, '1' flag from dual
);
-- 验证
select * from t_demo;
此方案未在Mybatis环境下完整验证,但语法本身可行。它利用`UNION ALL`合并多个`SELECT FROM DUAL`的结果集作为数据源,一次性写入。逻辑清晰,但手工拼接工作量大,且需额外的动态SQL处理。