我目前正在从 PostgreSQL 迁移到 Oracle DBMS。但出现一些问题。我希望工作“插入所有序列并将序列返回到应用程序”使用生成密钥在 mybatis 中。”
我的 PostgreSQL 代码是(它也适用于 MySQL 和 MariaDB)
<insert id="insertServiceCodeList" parameterType="serviceCodeVo" useGeneratedKeys="true" keyColumn="code" keyProperty="code">
insert into service_code (
serv_info_seq_id,
name,
default_key_type,
cre_date,
creator,
description,
state
) values
<foreach collection="list" item="item" separator=",">
(
#{item.servInfoSeqId},
#{item.name},
#{item.defaultKeyType},
now(),
#{item.creator},
#{item.description},
0
)
</foreach>
</insert>
我尝试过案例。请参阅下面的内容。
情况1
它在Oracle中可以工作,但在mybatis中不起作用,不返回序列。
1.创建序列
Create Sequence service_code_seq;
2.为sequence.nextval创建函数
create or replace function get_seq( seq_name in varchar2 )
return
number
is
v_num number;
sql_stmt varchar2(64);
begin
sql_stmt := 'select ' || seq_name || '.nextval from dual';
execute immediate sql_stmt into v_num;
return v_num;
end;
3.mybatis插入全部代码
<insert id="insertServiceCodeList" parameterType="serviceCodeVo" useGeneratedKeys="true" keyColumn="code" keyProperty="code">
insert all
<foreach collection="list" item="item" >
into service_code (
code,
serv_info_seq_id,
name,
default_key_type,
cre_date,
creator,
description,
state
) values (
get_seq( 'service_code_seq' ),
#{item.servInfoSeqId},
#{item.name},
#{item.defaultKeyType},
systimestamp,
#{item.creator},
#{item.description},
0
)
</foreach>
select * from dual;
</insert>
慕妹3242003
相关分类