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后出现的。通常是因为distinct和order 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;