记录oracle使用中遇到的问题

之前开发时一直使用MySQL,现在项目中使用的数据库是Oracle,虽然大部分语句都一样,但也有一些差别比较大,因此记录一下,方便查询。代码都是整合mybatis后xml中的SQL。

1. 查询结果排序

使用nlssort(字段名,'NLS_SORT=SCHINESE_PINYIN_M')

例子:order by nlssort(orgName,‘NLS_SORT=SCHINESE_PINYIN_M’), nlssort(itemCategory2Name,‘NLS_SORT=SCHINESE_PINYIN_M’)

NLS_SORT的取值决定了排序的方式:

  • SCHINESE_PINYIN_M : 按照拼音排序
  • SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序
  • SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序

2. 日期比较

按照日期区间查询时需要使用to_date('2019-04-02','YYYY-MM-DD')函数。
其他:mybatis中还需要用<![CDATA[原样输出的值 ]]>,防止<>等符号被误读报错。
另外,大于小于号还可以用这个的标记:&gt;=, &lt;=
例子:PH_PUTAWAY_DATE &lt;= to_date(#{order.putawayDateEnd},‘yyyy-mm-dd’)
—>PH_PUTAWAY_DATE <= to_date(#{order.putawayDateEnd},‘yyyy-mm-dd’).


3. 批量插入

先上例子。

<insert id="batchSaveCarrierFreightTempBean" parameterType="java.util.List">
        INSERT INTO TMP_YFJSJDB (WTDID,ZYSFS,CYSID,FYL,YF,YSQ,SQYF,YJS,
            JSYF,YKP,KPYF,YSH,SHYF,FKYF,WFKYF) 
        <foreach collection="list" item="item" index="index" separator="union all" >
        select 
            #{item.wtdid},#{item.zysfs},#{item.cysId},#{item.fyl},#{item.yf},
            #{item.ysq},#{item.sqyf},#{item.yjs},#{item.jsyf},#{item.ykp},
            #{item.kpyf},#{item.ysh},#{item.shyf},#{item.fkyf},#{item.wfkyf} 
        from dual 
        </foreach>
    </insert>

开发时,切忌在循环中访问数据库,在数据量大时会出现问题,数据库连接池中的连接都会被占用,然后报错:超出最大游标数。

按照MySQL的写法则会报错:程序未正确关闭,其实就是数据库语句本身的错误。
值太多等其他问题。

还有第二种写法:

<insert id="batchSaveCarrierFreightTempBean" parameterType="java.util.List">
        INSERT ALL 
        <foreach collection="list" item="item" index="index" separator="union all" >
        INTO TMP_YFJSJDB (WTDID,ZYSFS,CYSID,FYL,YF,YSQ,SQYF,YJS,
            JSYF,YKP,KPYF,YSH,SHYF,FKYF,WFKYF)  values(
            #{item.wtdid},#{item.zysfs},#{item.cysId},#{item.fyl},#{item.yf},
            #{item.ysq},#{item.sqyf},#{item.yjs},#{item.jsyf},#{item.ykp},
            #{item.kpyf},#{item.ysh},#{item.shyf},#{item.fkyf},#{item.wfkyf} )
        </foreach>
    </insert>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值