Mysql改造Oracle 不同之处。 最近项目需要改造一版Oracle的,之前是Mysql,改造过程中记录了Mysql和Oracle的不同之处,目前遇到这些后续会再追加
最近项目需要改造一版Oracle的,之前是Mysql,改造过程中记录了Mysql和Oracle的不同之处,目前遇到这些后续会再追加)
一、查询一条数据
(1) Mysql
Mysql中使用limit 1
(2) Oracle
Oracle中使用rownum <=1 mybatis(xml文件)中rownum <![CDATA[<=]]>1
二、系统时间
(1) MySQL
Mysql中使用sysdate()
(2) Oracle
Oracle中使用SYSDATE
三、CONCAT
(1) Mysql
Mysql中CONCAT可以支持多个参数。
例:concat('aa','bb','cc')
(2) Oracle
Oracle中CONCAT只支持两个参数,如果超过两个参数时嵌套使用。
例:concat(concat('aa','bb'),'cc')
四、FIND_IN_SET
(1) Mysql
select * from base user where find_in_set(1', roleId)
(2) Oracle
select * from base user where find_in_set('1',roleId) <> 0;
<>0 或 >0 的即为存在,返回记
Oracle中没有FIND_IN_SET函数,先创建FIND_IN_SET函数。脚本如下
CREATE OR REPLACE FUNCTION find_in_set ( arg1 IN VARCHAR2, arg2 IN VARCHAR )
return NUMBER IS Result NUMBER;
BEGIN
SELECT
instr( ',' || arg2 || ',', ',' || arg1 || ',' ) INTO Result
FROM
dual;
return ( Result );
END find_in_set;
五、日期类型查询
(1)Mysql
<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
AND date_format(u.create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d')
</if>
<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
AND date_format(u.create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d')
</if>
(2)Oracle
<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
AND u.create_time >= to_date(#{params.beginTime},'yyyy-mm-dd')
</if>
<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
AND u.create_time <= to_date(#{params.endTime},'yyyy-mm-dd')
</if>
六、自增
(1)Mysql中有自增
(2)Oracle中没有,需要建序列
create sequence SEQ_USER_INFO_ID//你创建的序列的名称
increment by 1 //每次自增长1
start with 1 //默认id从1开始
maxvalue 99999999 //设置序列最大值为8位9 , NOMAXvalue代表不设置最大值
minvalue 1 //设置最小值
cache 20; //设置缓存的个数,因为是缓存在内存中,当系统死机后,将会跳过20个序列导致序列不连续 ; 这里可以写nocache不缓存序列
在Mybatis中调用
<selectKey keyProperty="userId" resultType="Long" order="BEFORE">
SELECT SEQ_SYSTEM.NEXTVAL AS VALUE FROM DUAL
</selectKey>
七、批量新增
(1)Mysql
<insert id="batchPageManageDimensionSub">
insert into page_manage_dimension_sub( id, page_manage_id, dimension_id, analysis_dimension_sub_id, dimension_name, dimension_type, default_flag) values
<foreach item="item" index="index" collection="list" separator=",">
( #{item.id}, #{item.pageManageId}, #{item.dimensionId}, #{item.analysisDimensionSubId}, #{item.dimensionName}, #{item.dimensionType}, #{item.defaultFlag})
</foreach>
</insert>
(2)Oracle
不需要自动生成主键的时候
<insert id="batchUserRole" parameterType="java.util.List" useGeneratedKeys="false">
insert into sys_user_role(user_id, role_id)
<foreach item="item" index="index" collection="list" separator="union all">
(
select
#{item.userId},#{item.roleId}
from dual
)
</foreach>
</insert>
需要自动生成主键的时候
<insert id="batchPageManageAnalysisSub" parameterType="java.util.List" useGeneratedKeys="false">
insert into page_manage_analysis_sub(id, page_manage_id, analysis_manage_id, analysis_manage_name, analysis_length, analysis_width, analysis_sort)
select page_manage_analysis_sub_seq.nextval,A.* from (
<foreach item="item" index="index" collection="list" separator="union all">
select
#{item.pageManageId,jdbcType=BIGINT}, #{item.analysisManageId,jdbcType=BIGINT}, #{item.analysisManageName,jdbcType=VARCHAR},
#{item.analysisLength,jdbcType=VARCHAR}, #{item.analysisWidth,jdbcType=VARCHAR}, #{item.analysisSort,jdbcType=BIGINT}
from dual
</foreach>
) A
</insert>