执行Hibernate SQL查询时出现错误。
java.sql.SQLException: ORA-00904:"table_name"."column_name":无效标识符
在sqldeveloper中打开表时,该列是存在的。
这个错误只发生在PROD环境中,而不是DEV环境中。
我应该检查什么?
执行Hibernate SQL查询时出现错误。
java.sql.SQLException: ORA-00904:"table_name"."column_name":无效标识符
在sqldeveloper中打开表时,该列是存在的。
这个错误只发生在PROD环境中,而不是DEV环境中。
我应该检查什么?
ORA-00904-invalid identifier
错误通常由大小写问题引起。通常情况下,Oracle 的表和列名不区分大小写,也不能包含标点符号和空格。但如果您使用双引号创建引用标识符,那么该标识符必须始终用双引号引用,并且大小写必须正确。例如:
create table bad_design("goodLuckSelectingThisColumn " number);
如果执行用户没有足够的权限来访问查询涉及到的对象,Oracle 会抛出 ORA-00904
错误。
请将列名用双引号括起来,如 "columnName"。
如果错误信息显示的字符大小写与您所写的不同,则很可能是您的SQL客户端自动执行了大小写转换。使用双引号来绕过这个问题。(Squirrell Client 3.0中适用)。
**@Column(name = "NAME", length = 100)
public String getName() {**
return name;
}
public void setName(String name) {
this.name= name;
}
你是否比较过生产环境和开发环境的表定义?
当你在SQL Developer中运行查询时,是否使用与应用程序相同的数据库和用户在生产环境中运行查询?
如果你正在添加一些额外的列(使用alter命令),而这些更改尚未推广到生产环境,那么可能会出现此问题。
你能否发布表的定义和实际查询?
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
子句中不使用表名或别名对列进行合格化。正确的方式应该是:
select x
from table1
join table2 using (x);
select x
from table1 t1
join table2 t2 using(x);
我看到了一个与上述原因略有不同的错误:
我使用了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>
我使用Toad for Oracle,如果表格的所有者与您登录的用户名不同,并且您有权读取该表格,则仍然可能需要将原始表格所有者添加到表格名称中。
例如,假设表格所有者的名称为“OWNER1”,而您已登录为“USER1”。这个查询可能会给你一个ORA-00904错误:
select * from table_name where x='test';
在表名前加上表所有者的前缀可以消除错误并得到结果:
select * from