Подтвердить что ты не робот

Почему у меня есть ORA-00904, даже если столбец присутствует?

Я вижу ошибку при выполнении запроса hibernate sql.

java.sql.SQLException: ORA-00904: "table_name". "column_name": недопустимый идентификатор

Когда я открываю таблицу в sqldeveloper, столбец присутствует.

Ошибка происходит только в PROD, а не в DEV.

Что я должен проверить?

4b9b3361

Ответ 1

Это может быть проблема чувствительности к регистру. Обычно таблицы и столбцы не чувствительны к регистру, но они будут, если вы используете кавычки. Например:

create table bad_design("goodLuckSelectingThisColumn" number);

Ответ 2

Oracle будет бросать ORA-00904, если пользователь не имеет соответствующих разрешений для объектов, участвующих в запросе.

Ответ 3

Это случилось со мной, когда я случайно определил два объекта с одинаковой постоянной таблицей базы данных. В одной из таблиц рассматриваемая колонка существовала, а другая - нет. При попытке сохранить объект (типа, ссылающегося на неправильную базовую таблицу базы данных), эта ошибка возникла.

Ответ 4

Введите имя столбца между цитатой DOUBLE, как в "columnName".

Если сообщение об ошибке показывает другой случай с символом, чем то, что вы написали, очень вероятно, что ваш клиент sql выполнил автоматическое преобразование для вас. Используйте двойную кавычку, чтобы обойти это. (Это работает на Squirrell Client 3.0).

Ответ 5

Это потому, что одна из БД столбца была создана с ", что делает его имя чувствительным к регистру.

Имя столбца таблицы Oracle: GoodRec Улей не может распознать чувствительность к регистру: ОШИБКА была брошена - Вызвано: java.sql.SQLSyntaxErrorException: ORA-00904: "GOODREC": недопустимый идентификатор

Решение. Переименуйте имя столбца Oracle во все кепки.

Ответ 6

проверить позицию аннотации столбца в классе 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;
}

Ответ 7

Вы сравнили определения таблиц в Prod и Dev?

И когда вы запускаете его в SQL Developer, выполняете ли вы запрос в Prod (той же базе данных, что и приложение), и с тем же пользователем?

Если есть дополнительные столбцы, которые вы добавляете (с помощью команды alter), и эти изменения еще не продвигаются в prod, эта проблема возможна.

Можете ли вы опубликовать определение таблицы и ваш фактический запрос?

Ответ 8

Я использую Toad для Oracle, и если таблица принадлежит другому имени пользователя, кроме того, с которым вы вошли в систему, и у вас есть доступ к чтению таблицы, вам все равно может потребоваться добавить первоначального владельца таблицы в имя таблицы.

Например, допустим, что имя владельца таблицы - "OWNER1", и вы вошли в систему как "USER1". Этот запрос может дать вам ошибку ORA-00904:

select * from table_name where x='test';

Префикс table_name владельцем таблицы устранил ошибку и дает результаты:

select * from 

Ответ 9

Проверьте учетные данные имени пользователя, используемые для входа в базу данных. (persistence.xml??). В основном проблема заключается в том, что имя пользователя\пароль, используемый для входа в базу данных, не имеет видимости для объекта (в этом случае имя таблицы). (попробуйте войти в sql-разработчик, используя то же имя пользователя\пароль, доступный в вашем источнике данных)