Mysql改造Oracle 不同之处

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') &gt;= 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') &lt;= date_format(#{params.endTime},'%y%m%d')
	</if>

(2)Oracle

	<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
		AND u.create_time &gt;= to_date(#{params.beginTime},'yyyy-mm-dd')
	</if>
	<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
		AND u.create_time &lt;= 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>
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值