使用oracle发生标识符无效问题及解决

 更新时间:2023年07月29日 08:49:29   作者:误入歧途的羔羊  
这篇文章主要介绍了使用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数据库用户的密码过期时间如何修改为永不过期

    Oracle数据库用户的密码过期时间如何修改为永不过期

    Oracle的密码过期规则是用Profile来管理的,系统默认只有一个Profile(DEFAULT),该profile的密码过期规则为180天。那么如何修改Oracle数据库用户的密码过期时间为永不过期呢?下面通过本文给大家介绍下
    2017-01-01
  • Oracle数据库安全策略分析 (三)

    Oracle数据库安全策略分析 (三)

    Oracle数据库安全策略分析 (三)...
    2007-03-03
  • oracle设置密码复杂度及设置超时退出的功能

    oracle设置密码复杂度及设置超时退出的功能

    我们都知道密码策略加固的参数一般包括密码长度、复杂度检测、最大最小使用时间、过期警报时间、最大登录失败次数以及锁定时间等设置,下面这篇文章主要给大家介绍了关于oracle设置密码复杂度及设置超时退出功能的相关资料,需要的朋友可以参考下
    2022-06-06
  • Oracle动态视图v$active_session_history实战示例

    Oracle动态视图v$active_session_history实战示例

    这篇文章主要为大家介绍了Oracle动态视图v$active_session_history实战示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Oracle Instr函数实例讲解

    Oracle Instr函数实例讲解

    instr函数为字符查找函数,其功能是查找一个字符串在另一个字符串中首次出现的位置,instr函数在Oracle/PLSQL中是返回要截取的字符串在源字符串中的位置,这篇文章主要介绍了Oracle Instr函数实例讲解,需要的朋友可以参考下
    2022-11-11
  • PL/SQL 类型格式转换

    PL/SQL 类型格式转换

    PL/SQL 类型格式转换...
    2007-03-03
  • oracle初始化参数设置

    oracle初始化参数设置

    oracle初始化参数设置...
    2007-03-03
  • 将mysql转换到oracle必须了解的50件事

    将mysql转换到oracle必须了解的50件事

    我其实是同一天看到Robert Treat几人整理的”Mysql 迁移到Oracle前需要了解的50件事“与Baron Schwartz的”Oracle迁移到Mysql之前需要了解的50件事“的,只是Baron Schwartz的这个列表可能对大家更加有用处,也就先将其整出来了.
    2010-06-06
  • Oracle如何在SQL语句中对时间操作、运算

    Oracle如何在SQL语句中对时间操作、运算

    时间操作运算对大家来说应该都不陌生,这篇文章主要给大家介绍了关于Oracle如何在SQL语句中对时间操作、运算的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • 详解ORACLE SEQUENCE用法

    详解ORACLE SEQUENCE用法

    Oracle中的sequence用法在oracle中sequence就是所谓的序列号,本文详细的介绍了ORACLE SEQUENCE用法,具有一定的参考价值,有兴趣的可以了解下。
    2016-12-12

最新评论