Oracle ошибка ora 00904

Обновлено: 04.07.2024

ORA-00904 Cause

So, you ran an SQL statement and you got this error:

What causes this error?

ORA-00904 Solution

To resolve the ORA-00904 error, check the following:

This query will return an ORA-00904 error:

This error occurred on line 3, according to the output. The line numbers for errors can be helpful in working out the cause.

This is what happens when I try to use an alias inside a WHERE clause:

This query runs without issues.

ORA-00904 Invalid Identifier But Column Exists

Take a look at the steps in the solution section above.

ORA-00904 Invalid Identifier Insert Statement

Are you getting an ORA-00904 error when using an INSERT statement?

Now, when I insert into the table:

Why is this causing an issue? There is clearly an author column in the table and in the statement, they are both spelt the same.

The error occurs because using double quotes in Oracle CREATE TABLE statements means the correct case, or double quotes, always need to be used.

To fix this, you can do one of two things:

A statement may look like this:

This row has inserted successfully.

ORA-00904 Invalid Identifier Create Table

Consider this example:

The reason this error has occurred is because a constraint refers to a column that does not exist.

In the first line inside the brackets, I specify CONSTRAINT, then the book_id column, data type and primary key.

However, this syntax means I am declaring a constraint. But, I have not yet declared the column yet.

One of the ways to correct this table definition is to remove the CONSTRAINT keyword.

An even better way is to separate the column definition and the constraint creation. This is better because you can name the constraint, which makes it easier to manage later.

For more information on creating tables, read my guide on the CREATE TABLE statement.

I tried to write the following inner join query using an Oracle database:

That gives the below error:

The DDL of one table is:


2,025 6 6 gold badges 40 40 silver badges 49 49 bronze badges


1,895 5 5 gold badges 21 21 silver badges 32 32 bronze badges Are you sure the column name Department_Code is spelled correctly?

12 Answers 12

Your problem is those pernicious double quotes.

Oracle SQL allows us to ignore the case of database object names provided we either create them with names all in upper case, or without using double quotes. If we use mixed case or lower case in the script and wrapped the identifiers in double quotes we are condemned to using double quotes and the precise case whenever we refer to the object or its attributes:

tl;dr

don't use double quotes in DDL scripts

(I know most third party code generators do, but they are disciplined enough to put all their object names in UPPER CASE.)

The reverse is also true. If we create the table without using double-quotes …

… we can reference it and its columns in whatever case takes our fancy:

139k 19 19 gold badges 158 158 silver badges 272 272 bronze badges

In my case, this error occurred, due to lack of existence of column name in the table.

When i executed " describe tablename " , i was not able to find the column specified in the mapping hbm file.

After altering the table, it worked fine.


11.1k 2 2 gold badges 67 67 silver badges 74 74 bronze badges

FYI, in this case the cause was found to be mixed case column name in the DDL for table creation.

However, if you are mixing "old style" and ANSI joins you could get the same error message even when the DDL was done properly with uppercase table name. This happened to me, and google sent me to this stackoverflow page so I thought I'd share since I was here.

The two SQL statements above are equivalent and produce no error.

When you try to mix them you can get lucky, or you can get an Oracle has a ORA-00904 error.

And the unhelpful error message that doesn't really describe the problem at all:

I was able to find some research on this in the following blog post:

In my case, I was attempting to manually convert from old style to ANSI style joins, and was doing so incrementally, one table at a time. This appears to have been a bad idea. Instead, it's probably better to convert all tables at once, or comment out a table and its where conditions in the original query in order to compare with the new ANSI query you are writing.

Я попытался написать следующий внутренний запрос соединения, используя базу данных Oracle:

это дает следующую ошибку:

DDL одной таблицы:

ваша проблема в этих пагубных двойных кавычках.

Oracle SQL позволяет игнорировать случай имен объектов базы данных при условии, что мы либо создаем их с именами в верхнем регистре, либо без использования двойных кавычек. Если мы используем смешанный регистр или нижний регистр в скрипте и завернули идентификаторы в двойные кавычки, мы обречены на использование двойных кавычек и точного случая всякий раз, когда мы ссылаемся на объект или его атрибуты:

tl; dr

Не используйте двойные кавычки в сценариях DDL

(Я знаю, что большинство сторонних генераторов кода делают, но они достаточно дисциплинированы, чтобы поместить все свои имена объектов в верхнем регистре.)

в моем случае эта ошибка произошла из-за отсутствия имени столбца в таблице.

когда я выполнил " describe tablename " , Я не смог найти столбец, указанный в файле сопоставления НВМ.

после изменения таблицы, он работал нормально.

DEPARTMENT_CODE не является столбцом, который существует в команде таблицы. Проверьте DDL таблицы, чтобы найти правильное имя столбца.

FYI, в этом случае причиной было найдено имя столбца смешанного случая в DDL для создания таблицы.

два оператора SQL выше эквивалентны и не производят ошибка.

когда вы пытаетесь смешать их, вам может повезти, или вы можете получить Oracle имеет ошибку ORA-00904.

я смог найти некоторые исследования по этому вопросу в следующем блоге:

В моем случае, я пытался вручную преобразовать из старого стиля в стиль ANSI присоединяется и делает это постепенно, по одной таблице за раз. Похоже, это была плохая идея. Вместо этого, вероятно, лучше преобразовать все таблицы сразу или прокомментировать таблицу и ее условия where в исходном запросе для сравнения с новым запросом ANSI, который вы пишете.

вы уверены, что у вас есть столбец DEPARTEMENT_CODE в таблице PS_TBL_DEPARTMENT_DETAILS

У меня было такое же исключение в JPA 2 с помощью Eclipse link. У меня был @embedded класс с отношением один к одному с сущностью. По ошибке, во встроенном классе у меня также была аннотация @Table ("трейдер"). Когда БД была создана JPA из сущностей, она также создала table TRADER (что было неправильно, поскольку сущность Trader была встроена в основную сущность), и существование этой таблицы вызывало вышеуказанное исключение каждый раз, когда я пытался сохранить свою сущность. После удаления за столом трейдера это исключение не устраивало.

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

для запросов к таблицам необходимо предоставить разрешение SELECT.
Для запросов к другим типам объектов (например, хранимым процедурам) необходимо предоставить разрешение EXECUTE.

Я передавал значения без кавычек. Как только я передал условия внутри одинарных кавычек, это сработало как шарм.

Но я получаю ошибку ORA-00904: "INN_FV"."CRDCCOEFF" недопустимый идентификатор в строке:

2 ответа

потолок в oracle 11g бросает java.sql.SQLException: ORA-00904: CEILING: недопустимый идентификатор. До сих пор используются Oracle 10G, теперь мы обновились до 11G, после чего получаем ошибку CEILING: недопустимый идентификатор может ли кто-нибудь помочь в этом, пожалуйста.

Oracle 11g Express Edition ..Ошибка при создании таблицы CREATE TABLE FLIGHT_FARE ( FLIGHT_FARE_ID INTEGER NOT NULL , FLIGHTROUTES_FR_ID INTEGER NOT NULL , TBLFARE_FARE_ID INTEGER NOT NULL , PRIMARY KEY(FLIGHT_FARE_ID) , INDEX FLIGHT_FARE_FKIndex2(TBLFARE_FARE_ID) , ***INDEX.

Вам не нужен динамический SQL вместо этого вы можете использовать оператор IS OF( type ) и функцию TREAT :

Oracle 11g R2 Настройка схемы :

Запрос 1 :

Или вы можете определить соответствующую функцию-член в типах:

Oracle 11g R2 Настройка схемы :

Запрос 1 :

Использование динамического SQL:

(Я не считаю, что использовать это хорошая идея, и публикую ее только как proof-of-concept. Вместо этого вы должны определить OVERRIDING MEMBER FUNCTION s для каждого подтипа, как в моем другом ответе, и вызвать их )

Oracle 11g R2 Настройка схемы :

Запрос 1 :

Использование базы данных Oracle 11g Express Edition Это создает мою таблицу Car_Asset: CREATE TABLE Car_Asset (Car_No SMALLINT, Registration_No CHAR(16), Mileage INTEGER, Date_MOT_Due DATE, Condition VARCHAR(20), CONSTRAINT car_pk PRIMARY KEY (Car_No,Registration_No)); Это создает мою таблицу.

У меня возникли проблемы с моей функцией Oracle, которая выдает мне следующую ошибку: ORA-00904: A: invalid identifier ORA-06512: at SCORING.F_BONITETA2, line 11 00904. 00000 - %s: invalid identifier *Cause: *Action: Очевидно, что а в decode(a.boniteta, A, 1, 2) вызывает эту ошибку. Я попытался.

Похожие вопросы:

Я получаю запутанную ошибку ORA97100 missing SET keyword при попытке запустить этот простой оператор UPDATE, хотя ключевое слово set там есть: UPDATE CURRENT_LOAD as ac SET ac.LOAD_START_TIMESTAMP =.

Итак, у меня есть веб-приложение, которое принимает строку, в которой элементы ID разбиты на ' - ' (например, someid1-someid2 ).), а затем преобразует строку во что-то вроде someid1 OR someid2 . Это.

Это очень интересно, я не знаю, почему я получаю недопустимый идентификатор ORA-00904, когда пытаюсь создать таблицу с oracle. CREATE TABLE animals ( CONSTRAINT animal_id NUMBER(6) PRIMARY_KEY, name.

потолок в oracle 11g бросает java.sql.SQLException: ORA-00904: CEILING: недопустимый идентификатор. До сих пор используются Oracle 10G, теперь мы обновились до 11G, после чего получаем ошибку.

Oracle 11g Express Edition ..Ошибка при создании таблицы CREATE TABLE FLIGHT_FARE ( FLIGHT_FARE_ID INTEGER NOT NULL , FLIGHTROUTES_FR_ID INTEGER NOT NULL , TBLFARE_FARE_ID INTEGER NOT NULL , PRIMARY.

Использование базы данных Oracle 11g Express Edition Это создает мою таблицу Car_Asset: CREATE TABLE Car_Asset (Car_No SMALLINT, Registration_No CHAR(16), Mileage INTEGER, Date_MOT_Due DATE.

У меня возникли проблемы с моей функцией Oracle, которая выдает мне следующую ошибку: ORA-00904: A: invalid identifier ORA-06512: at SCORING.F_BONITETA2, line 11 00904. 00000 - %s: invalid.

первый раз, используя Oracle, нужно создать таблицы для моего проекта класса Продолжайте получать ошибку ORA-00904 : недопустимый идентификатор Вот мой сценарий. Любые подсказки, советы, предложения.

Я хочу создать эту простую таблицу в oracle application express, но я продолжаю получать ошибку ORA-00904: : неверный идентификатор и я понятия не имею почему. CREATE TABLE ArtWork ( ArtWorkId.

Я написал простую процедуру pl\sql для чтения значения в БД. Для одного и того же значения я использую две разные функции, чтобы иметь в конце разное значение. Мой код begin select.

Читайте также: