oracle踩坑记录

1、在mybatis plus 下 出现 ORA-00911: 无效字符 

  Xml文件中SQL语句不能用分号结尾

2、to_char( value, [ format_mask ], [ nls_language ] ) 函数

作用:将数字或日期将被转换为一个字符串。

如:select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

日期格式化参数如下:

ORACLE日期时间格式化参数详解 - shuzihua - 博客园

注意:Oracle是大小写不敏感的,所以日期格式化格式也不区分大小写。

但是Oracle大小写不敏感的前提条件:是在没有使用引号"的前提下!!!

oracle mybatis 日期 查询例子:

1、传入参数为日期,LocalDate LocalDateTime 都可以,

public interface xxxMapper extends BaseMapper<xxx> {

    List<xxx> xxx(@Param("date") LocalDate date);

}
   <select id="xxx" resultType="xxx">
        SELECT
        *
        FROM
        xxx
        <where>
        <![CDATA[
        AND create_time >= to_date(to_char(#{date},'yyyy-MM-dd')||' 00:00:00','yyyy-MM-dd HH24:MI:SS')
        AND create_time <= to_date(to_char(#{date},'yyyy-MM-dd')||' 23:59:59','yyyy-MM-dd HH24:MI:SS')
        ]]>
</where>
       
    </select>

注:使用<![CDATA[   ]]>  就不用转义

2、传入参数为日期字符串

public interface xxxMapper extends BaseMapper<xxx> {
#String startTime="2022-12-05 00:00:00";
#String endTime="2022-12-05 23:59:59";

    List<xxx> xxx(@Param("startTime") String startTime,@Param("endTime") String endTime);

}
   <select id="xxx" resultType="xxx">
        SELECT
        *
        FROM
        xxx
        <where>
            and create_time between  to_date(#{startTime},'yyyy-MM-dd HH24:MI:SS')
            and to_date(#{endTime},'yyyy-MM-dd HH24:MI:SS')
        </where>
       
    </select>

3、Oracle 等中的 group by与where 子句不能使用别名

Sql语句执行顺序为:

(7)    SELECT

(8)    DISTINCT <select_list>

(1)    FROM <left_table>

(3)    <join_type> JOIN <right_table>

(2)    ON <join_condition>

(4)    WHERE <where_condition>

(5)    GROUP BY <group_by_list>

(6)    HAVING <having_condition>

(9)    ORDER BY <order_by_condition>

(10)   LIMIT <limit_number> 

(7)之后,比如order中,distinct中。

这是因为在SQL执行的时候,WHERE和GROUP语句在字段分类之前就已经执行了,在此期间,别名还没有生效,因此找不到指定别名的字段,报错。

注意:
           在mysql中,group by中可以使用别名;where中不能使用别名;order by中可以使用别名。oracle严格遵循sql执行顺序的,groupby后面不能用别名。mysql特殊是因为mysql中对查询做了优化处理

4、select ... for update

与mysql写法有点不同。会对查询到的结果集进行加x锁,行级锁。

语法如下:

SELECT ... FOR UPDATE [OF column_list][WAIT n|NOWAIT][SKIP LOCKED];

写法:

select for update 可以看成 select for update wait UN-LIMITED ,会永远等待,除非获得锁 
 
 
select for update wait X—— 最多等待锁X秒。超时,java会报CannotAcquireLockException
 
select for update nowait —— 不会等待锁,得不到锁,超时会报错

select for update skip locked  则执行sql时,拿不到锁即不等待,也不报资源忙异常

5、oracle 字段类型varchar nvarchar 区别

6、oracle number 数据类型 与所占空间大小 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值