使用oracle发生标识符无效问题及解决
目录
使用oracle发生标识符无效
1、一直以来写SQL语句发生标识符无效一般多为列名写错导致
2、也有许多情况是使用了关键字作为了列名
但是今天发生了一个意外的情况,在oracle数据库建了一张表,创建成功后,发现数据表的列名是小写的,想了想看过的书里面说过oracle会自动将小写转换成大写,于是就选择性忽略了.
由于oracle会自动将我们写的SQL语句列名自动转为大写,所以平时写SQL时,采用全小写方式居多.
但是今天我却收获到了一个错误信息
标识符无效
检查了好几遍,都没有发现列名有错误
尝试了10+min进行解决,还是搞不定,百度了之后,得到的结果都是列名不一致导致,但是我检查了好几遍,都没有发现列名错误
结合之前有了解过PostgreSQL的怪异问题 于是将SQL语句中的列名加上双引号,成功查询出数据
得出结论:
Oracle表字段名SQL语句中的列名正确性大写SQL语句中大写正确大写SQL语句中小写正确(会自动将小写转为大写)大写SQL语句中小写(被引号包裹)错误小写SQL语句中大写错误小写SQL语句中小写错误(会自动将小写转为大写)小写SQL语句中小写(被引号包裹)正确(不进行大小写转换)`
所以当oracle数据表字段为小写时,必须使用引号("")将SQL中的列名包裹才能正确执行SQL语句.
oracle标识符无效其他原因
出现以下这种原因的可能是除了你的表名和列名没写对 或者大小写问题 或者没加引号 还有可能是你的语句有问题
以下就是问题之一
group by不同于sql 后面不能跟as起的别名!
ORA-00904: "ZHONGLEI": 标识符无效
错误的写法
select count(id) as sbNum
,to_char(create_time, ‘YYYY-MM-DD')as tian
,to_char(create_time, ‘MM-DD') as ZHONGLEI
from epidemic_report_info
where create_time >= #{dayStart} and create_time < #{dayEnd} and user_type like ‘S%'
group by tian,ZHONGLEI
order by tian asc
正确的写法
select count(ID) as sbNum
,to_char(CREATE_TIME, ‘YYYY-MM-DD') as tian
,to_char(CREATE_TIME, ‘MM-DD') as ZHONGLEI1
from EPIDEMIC_REPORT_INFO
where CREATE_TIME >= #{dayStart} and CREATE_TIME < #{dayEnd} and USER_TYPE like ‘P%'
group by to_char(CREATE_TIME, ‘YYYY-MM-DD'),to_char(CREATE_TIME, ‘MM-DD')
order by tian asc
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- .NET Core系列之MemoryCache 初识
- 007手机一键Root(安机网一键Root) v3.0 官方最新版 一键ROOT您的Android手机
- 12306密码被盗了怎么办?12306密码外泄解决方法
- 12个字的qq网名
- 150M迷你型无线路由器怎么设置?
- 192.168.1.1打不开怎么办?路由器192.168.1.1打不开的原因以及解决办法
- 2011年电子报合订本 电子报 编辑部 中文 PDF版 [84M]
- 2015年1月15日小米新旗舰发布会现场图文直播
- 2016.3.1vivo Xplay5新品发布会现场视频直播 优酷直播
- 2016华为P9发布会视频直播地址 4月15日华为P9国行发布会直播