Spring Cloud的框架 mysql数据库换成Oracle数据库 出现的bug及解决

1、无效字符:
使用符号的字段,如 select `type` from t_user; 需要去掉符号。

2、ORA-00904: “IFNULL”: invalid identifier
IFNULL 改为 nvl

3、无效的列类型:
更换ojdbc驱动ojdbc6 到 ojdbc8即可

com.oracle.database.jdbc
ojdbc8
19.11.0.0

4、关闭的语句;
修改ktfcp_db.yaml配置文件中的下面属性:
spring.datasource.druid.pool-prepared-statements=false
spring.datasource.druid.max-open-prepared-statements=-1
spring.datasource.druid…max-pool-prepared-statement-per-connection-size=-1

5、Direct self-reference leading to cycle reference chain…
升级seata到1.4.2

6、ORA-00909: 参数个数无效
oracle的CONCAT关键字只支持拼接两个字符串;
修改:concat(’%’, #{dto.transactionName}, ‘%’)改为
concat(concat(’%’, #{dto.transactionName}), ‘%’)

7、> ORA-00904: “IF”: 标识符无效或者> ORA-00907: 缺失右括号
count( IF (template_state = 1, 1, NULL) )修改为
count( decode (template_state , 1, 1, NULL) )

8、排序时,null值数据会优先排在上面
ORDER BY dimension.sys_ctime DESC NULLS last

9、java.sql.SQLSyntaxErrorException: ORA-00904: “FROM_UNIXTIME”: 标识符无效
TO_CHAR(pnmoney.collection_time / (1000 * 60 * 60 * 24) +
TO_DATE(‘1970-01’, ‘YYYY-MM’), ‘YYYY-MM’) 替换 FROM_UNIXTIME

10、ORA-28040:没有匹配的验证协议
Navicat客户端版本低了,换一个 高一些的Navicat客户端

11、ORA-00932: 数据类型不一致: 应为 -, 但却获得 NCLOB
当where条件的查询字段类型为NCLOB时,使用in关键字会出现该问题。解决方案:使用to_char(dimension.fin_organization_id)

12、GROUP BY pnm.id 报: ORA-00979: 不是 GROUP BY 表达式
GROUP BY 查询出来的所有字段

13、ORA-01741: 非法的零长度标识符
将双引号" " 改为’'单引号

14、ORA-12704: 字符集不匹配
‘0’ AS currency 修改为Translate(‘0’ USING NCHAR_CS) AS currency

15、ORA-00936: 缺失表达式
字段是Oracle关键字导致的,字段加上双引号("")

16、ORA-01722: 无效数字 org_breed IN (0) 类型不匹配导致,需要使用 org_breed IN (‘0’)(org_breed是个数组)
Mybaits ${var} 返回实际类型 #{var} 返回字符串,使用 #{var}可以处理

17、limit 1 使用出错
改为rownum = 1

18、查询字段存在关键字date
date改为"DATE"

19、ORA-00932: 数据类型不一致: 应为 -, 但却获得 NCLOB
对应出问题的字段加上to_char(字段)

20、ORA-00918: 未明确定义列
查询字段重名

21、ifnull( t.record_id, ‘’ ) != ‘’
IFNULL 改为 nvl;空字符串’'在oracle等同于null,不能用!= null,要用is not null

22、group_concat
改法1:wm_concat(目前数据库环境不适配);改法2: listagg( … , ‘,’) within group( order by …)

23、update + left join 语法 ORA-00971: 缺失 SET 关键字
如:
UPDATE …LEFT JOIN …ON …SET …
改为:
UPDATE (SELECT * FROM …LEFT JOIN … ON … ) table SET…

24、表名不能使用as
去掉as

25、ORA-00933: SQL 命令未正确结束 sql语句未加“;”,oracle执行不报错,程序运行报错
去掉“;”

26、ORA-00904: “TIMESTAMPDIFF”: 标识符无效

27、ORA-00904: “RIGHT”: 标识符无效
使用substr函数来变相实现

28、ORA-01790: 表达式必须具有与对应表达式相同的数据类型
当union多张表时,检查对应字段的类型是否一致,可能A表的字段类型为NVARCHAR2,B表的字段类型为NCLOB。

29、ORA-00923: 未找到要求的 FROM 关键字。MYSQL支持select语句中不写from,Oracle不支持
如: SELECT 1 field_name
改为: SELECT 1 field_name FROM dual
dual是Oracle的一个虚拟表

30、ORA-00932: 数据类型不一致: 应为 NCHAR, 但却获得 NUMBER, Time: 0.005000s
改(case c.state when 0 then c.overdue_days else c.overdue_days_confirm end) overdue_days_confirm,
改为: (case when c.state = 0 then c.overdue_days else c.overdue_days_confirm end) overdue_days_confirm,

31、clob字段使用mybatis-plus代码生成的sql报错
1.改为mapper的sql写法;2.修改数据库表结构为varchar2等类型.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值