目录
  • 使用oracle发生标识符无效
    • 标识符无效
  • 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

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持本网站。

    您可能感兴趣的文章:

    • Oracle ORA-00904:标识符无效解决方法(太坑了!!)
    • PL/SQL登录Oracle数据库报错ORA-12154:TNS:无法解析指定的连接标识符已解决(本地未安装Oracle需要连接服务器上的)
    • Oracle报存储过程中调用DBLink同义词出现错误:PLS-00201: 必须声明标识符
    • Oracle出现ora-12154无法解析指定连接标识符的解决方法
    • Oracle连接出现ora-12154无法解析指定的连接标识符
    • Oracle导dmp出现文件ORA-12154: TNS: 无法解析指定的连接标识符问题的解决方案