Неверный идентификатор, хотя столбец находится в таблице

База данных Oracle 11g release2,

Существует приложение Spring, устанавливающее соединение с вышеуказанной базой данных. Все сопоставления верны. Во время выполнения при отправке формы для обновления записи я получаю исключение invalid identifier : some_column, Хотя столбец в таблице, когда я делаю desc command на это через SqlPlus! Так как это исправить?

2 ответа

Если ваше приложение заключает идентификаторы в двойные кавычки, дело имеет значение.

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как я уже сказал).

В вашем случае, простое решение, отбросьте двойные кавычки. Получить привычку НИКОГДА, НИКОГДА не использовать двойные кавычки; это избавит вас от многих проблем.

Другие вопросы по тегам