尽管列在表中,但标识符无效
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尽管列在表中,但标识符无效相关的知识,希望对你有一定的参考价值。
该数据库是Oracle 11g release2
。
有一个Spring应用程序连接到上面的数据库。所有映射都是正确的。在运行时提交表单以更新记录时,我得到例外invalid identifier : some_column
。虽然当我通过desc command
制作一个SqlPlus
时,该列在表中!那么如何解决这个问题呢?
如果您的申请将标识括在双引号中,那么案件就很重要。
create table t(id1 int, id2 int);
Table created.
UPDATE T SET ID1 = 1, ID2 = 2;
0 rows updated.
update t set id1 = 1, id2 = 2;
0 rows updated.
UPDATE T SET "ID1" = 1, ID2 = 2;
0 rows updated.
update t set "id1" = 1, id2 = 2;
update t set "id1" = 1, id2 = 2
*
ERROR at line 1:
ORA-00904: "id1": invalid identifier
默认情况下,标识符(模式,表,列,过程等的名称)以全大写形式存储在数据目录中。您可以按照自己想要的任何方式编写它们,并且可以在查询,功能等任何部分以任何方式使用它们。解析器(预处理器)以大写形式重写它们。
但这并不意味着Oracle不区分大小写。它不是。您可以通过将标识符括在双引号中来要求保留大小写。你做到了;你可能认为这意味着别的东西。
如果将列定义为id
,ID
或Id
,则可以通过三个名称中的任何一个来调用它,您仍然可以获得所需的结果。但是,如果你调用"ID"
列,那么每次引用时都必须将其称为"ID"
,而不是"id"
或"Id"
。 (但是,你可以将它称为id
,没有双引号,因为解析器会将其映射到ID
,这与"ID"
相同。)
实际上,您可以在同一个表中有两列,一个名为"ID"
,另一个名为"id"
- 没有冲突。它们可能包含不同的数据 - 它们甚至可能具有不同的数据类型。但是,你不能拥有"ID"
和ID
(或"ID"
和id
- 因为Oracle自动将id
映射到ID
,正如我已经说过的那样)。
在您的情况下,简单的解决方案是,删除双引号。养成永远的习惯,永远使用双引号;这样可以省去很多麻烦。
以上是关于尽管列在表中,但标识符无效的主要内容,如果未能解决你的问题,请参考以下文章