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 {

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

}
   

注:使用  就不用转义

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

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

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

}
   

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

Sql语句执行顺序为:

(7)    SELECT

(8)    DISTINCT

(1)    FROM

(3)     JOIN

(2)    ON

(4)    WHERE 

(5)    GROUP BY 

(6)    HAVING

(9)    ORDER BY

(10)   LIMIT  

(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 区别

oracle踩坑记录_第1张图片

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

oracle踩坑记录_第2张图片

你可能感兴趣的:(oracle,oracle,数据库)