8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

为什么即使该列存在也会出现 ORA-00904?

Joshua Snider 2月前

218 0

执行 hibernate sql 查询时出现错误。java.sql.SQLException: ORA-00904:\'table_name\'.\'column_name\': 无效标识符当我在 sqldeveloper 中打开表时,该列被 pr...

执行 Hibernate SQL 查询时出现错误。

java.sql.SQLException:ORA-00904:\'table_name\'。\'column_name\':无效标识符

当我在 sqldeveloper 中打开表时,该列就出现了。

该错误仅发生在 PROD 中,而不是 DEV 中。

我应该检查什么?

帖子版权声明 1、本帖标题:为什么即使该列存在也会出现 ORA-00904?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Joshua Snider在本站《oracle》版块原创发布, 转载请注明出处!
最新回复 (0)
  • ORA-00904-invalid identifier 错误通常是由大小写问题引起的。通常,Oracle 表和列不区分大小写,并且不能包含标点符号和空格。但是,如果您使用双引号创建带引号的标识符,则必须始终使用双引号引用该标识符,并且大小写正确。例如:

    create table bad_design("goodLuckSelectingThisColumn  " number);
    
  • 就我而言,这是因为区分大小写;因此我将 Oracle 中的列从 column_name 重命名为 COLUMN_NAME,问题得到解决

  • 如果执行用户对查询中涉及的对象没有适当的权限, ORA-00904 Oracle 将抛出异常。

  • 当我意外地使用同一个持久数据库表定义两个实体时,就会发生这种情况。在其中一个表中,有问题的列确实存在,而在另一个表中则不存在。当尝试持久化一个对象(引用错误底层数据库表的类型)时,会发生此错误。

  • 在双引号中写入列名,如 \'columnName\'。

    如果错误消息显示的字符大小写与您编写的字符大小写不同,则很可能是您的 SQL 客户端为您执行了自动大小写转换。使用双引号可以绕过该操作。(这适用于 Squirrell Client 3.0)。

  • 这是因为其中一个数据库的列是用 \' 创建的,这使其名称区分大小写。

    Oracle 表列名:GoodRecHive 无法识别区分大小写:抛出错误 - 原因:java.sql.SQLSyntaxErrorException:ORA-00904:\'GOODREC\':无效标识符

    解决方案:将 Oracle 列名重命名为全部大写。

  • D M 2月前 0 只看Ta
    引用 8

    检查 java 类中字段的列注释的位置例如,考虑一个名为 STUDENT 的表,其中包含 3 列(Name、Roll_No、Marks)。

    在 Getter 方法 (而不是 Setter 方法) 添加了下面的列注释 @Column(name = \'Name\', length = 100)

    **@Column(name = "NAME", length = 100)
    public String getName() {**
        return name;
    }
    
        public void setName(String name) {
        this.name= name;
    }
    
  • 您是否比较过 Prod 和 Dev 中的表定义?

    当您在 SQL Developer 中运行它时,您是否在 Prod 中(与应用程序相同的数据库)以相同的用户运行查询?

    如果您添加了一些附加列(使用 alter 命令)并且这些更改尚未提升到 prod,则可能会出现此问题。

    您可以发布表的定义和您的实际查询吗?

  • 似乎 Oracle 在很多情况下都会抛出这个错误。

    对我来说,这是被抛出的,因为我试图限定在 using 连接部分子句中使用的列。这两个都不起作用:

    select table1.x -- doesn't work
    from table1
    join table2 using (x);
    
    select t1.x -- doesn't work
    from table1 t1
    join table2 t2 using(x);
    

    这是因为我们可以使用 using 既不带表名也不带别名的 from 子句来限定列。正确的方法是:

    select x
    from table1
    join table2 using (x);
    
    select x
    from table1 t1
    join table2 t2 using(x);
    
  • 引用 11

    我看到这个错误的原因与上面给出的原因略有不同:

    我使用 liquibase 脚本修改了我已经存在的 (Oracle) 表。一切看起来都很好,但我的代码中的插入失败了。只有当我看到 SQL Developer 的自动完成功能为我提供了括起来的引号时,我才看到在创建时在列名后附加了一个空格。

    有问题的 liquibase changeSet 行如下所示(“MY_FIELD”结束引号前有一个空格):

    <addColumn tableName="MY_TABLE">
        <column name="MY_FIELD " type="tinyint" defaultValueNumeric="3">
            <constraints nullable="false"/>
        </column>
    </addColumn>
    
  • 引用 12

    如果我错了请纠正我。你指的是 .com/questions/6027961/…

  • 嗨,Nadeem - 不,我指的是当我尝试插入的列(加上一个不可见的空格)存在时收到的 ORA-00904 错误,这篇文章。虽然另一篇文章可能提出了类似的问题,但我没有详细讨论它。编辑:话虽如此,这是相同的错误消息(尽管我以不同的语言收到它),但我不是故意引用另一篇文章 ;)

  • 我使用 Toad for Oracle,如果该表的所有者不是您登录的用户名,并且您有权读取该表,则可能仍需要将原始表所有者添加到表名中。

    例如,假设表所有者的名称为“OWNER1”,并且您以“USER1”身份登录。此查询可能会给您一个 ORA-00904 错误:

    select * from table_name where x='test';
    

    在 table_name 前面加上表所有者可以消除错误并给出结果:

    select * from 
    
  • 这是由于 实体中定义的列名与表的列名不匹配 (在 SQL db 中)

    java.sql.SQLException:ORA-00904:\'table_name\'.\'column_name\':无效标识符例如java.sql.SQLException:ORA-00904:\'STUDENT\'.\'NAME\':无效标识符

    问题可能类似于 Student.java(实体文件)
    您仅将列名称指定为“NAME”。
    但是在 STUDENT 表中,列名是“NMAE”

  • 检查 Oracle 中的同义词声明。我正在调用如下所示的 PL/SQL 函数,它给出了 java.sql.SQLSyntaxErrorException:ORA-00904:无效标识符

    select oracle_my_pkg.notify_list_function from dual
    

    在为 oracle_my_pkg 声明公共同义词后,错误消息消失

  • 创建一个新表。但不要给出 \'(双引号)中的值,这看起来是唯一的解决方案

    create table bad_design(goodLuckSelectingThisColumn  number);
    

    代替

    create table bad_design("goodLuckSelectingThisColumn  " number);
    
  • 欢迎来到 StackOverflow。您的答案没有提供除已接受答案之外的任何额外信息。请补充有价值的见解或删除您的帖子。

  • 当您创建用于审计的历史表并使用注释 @@AuditTable(value =\'table_name\') 时,您还必须在历史表中添加相同的列

  • 引用 20

    检查用于登录数据库的用户名凭据。(persistence.xml ??)。问题主要是,用于登录数据库的用户名\密码对对象(在本例中为 table_name)不可见。(尝试使用数据源中可用的相同用户名\密码登录 sql 开发人员)

返回
作者最近主题: