Oracle数据库报错分析

本文介绍了使用 Oracle 数据库时会遇到的一些问题。

ORA-00936: 缺失表达式

SQL 语句写错啦!

ORA-00911: 无效字符

mybatis 的 Mapper.xml 中,sql 语句最后不需要“;”,去掉就 ok 了。

ORA-01745: 无效的主机/绑定变量名

Cause: java.sql.SQLSyntaxErrorException: ORA-01745: 无效的主机/绑定变量名.
是由于在插入数据的时候,两个填充变量之间没有逗号分隔。

ORA-01791: 不是 SELECTED 表达式

通常 ORA-01791 的错误,都是在使用distinct后出现的。通常是因为distinctorder by 一起使用,因为字段名称冲突报错。

例子

select distinct a.USER_NAME
from XXX a
order by a.id asc;

上面的 SQL 报错是因为order by后使用的字段名称,使用的是原始名称,不是使用别名所导致的。也就是说,如果有 distinct 时,order by 后面跟的字段名称,必须是最新的别名(若没有别名,就使用原来的名称,若有多层子查询,则使用最新的那个别名)。

解决方法

方法一

select distinct a.USER_NAME
from XXX a
order by 'a.id' asc; //排序使用别名'a.id'

方法二

select distinct a.USER_NAME, a.id //查询结果添加a.id
from INS_INSPECTION_APP_OLD a
where a.CUSTOMER_NUMBER = 740
order by a.id asc;