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等类型.