Ошибка ora 00922

ORA-00922

ORA-00922: неправильная опция

Причина:

Была указана неправильная опция в определении колонки или параметра памяти. Правильная опция при определении колонки как NOT NULL для указания, что колонка не содержит нулевых значений. Только ограничения могут следовать за типом данных. Указывая максимальную длину данных типа DATE или LONG вы будете часто вызывать эту ошибку.

Действие:

Проверьте ваш синтаксис и спеллинг. Удалите неправильную опцию или спецификацию длины из области определения колонки.

The error you’re getting appears to be the result of the fact that there is no underscore between «chartered» and «flight» in the table name. I assume you want something like this where the name of the table is chartered_flight.

CREATE TABLE chartered_flight(flight_no NUMBER(4) PRIMARY KEY
, customer_id NUMBER(6) REFERENCES customer(customer_id)
, aircraft_no NUMBER(4) REFERENCES aircraft(aircraft_no)
, flight_type VARCHAR2 (12)
, flight_date DATE NOT NULL
, flight_time INTERVAL DAY TO SECOND NOT NULL
, takeoff_at CHAR (3) NOT NULL
, destination CHAR (3) NOT NULL)

Generally, there is no benefit to declaring a column as CHAR(3) rather than VARCHAR2(3). Declaring a column as CHAR(3) doesn’t force there to be three characters of (useful) data. It just tells Oracle to space-pad data with fewer than three characters to three characters. That is unlikely to be helpful if someone inadvertently enters an incorrect code. Potentially, you could declare the column as VARCHAR2(3) and then add a CHECK constraint that LENGTH(takeoff_at) = 3.

CREATE TABLE chartered_flight(flight_no NUMBER(4) PRIMARY KEY
, customer_id NUMBER(6) REFERENCES customer(customer_id)
, aircraft_no NUMBER(4) REFERENCES aircraft(aircraft_no)
, flight_type VARCHAR2 (12)
, flight_date DATE NOT NULL
, flight_time INTERVAL DAY TO SECOND NOT NULL
, takeoff_at CHAR (3) NOT NULL CHECK( length( takeoff_at ) = 3 )
, destination CHAR (3) NOT NULL CHECK( length( destination ) = 3 )
)

Since both takeoff_at and destination are airport codes, you really ought to have a separate table of valid airport codes and define foreign key constraints between the chartered_flight table and this new airport_code table. That ensures that only valid airport codes are added and makes it much easier in the future if an airport code changes.

And from a naming convention standpoint, since both takeoff_at and destination are airport codes, I would suggest that the names be complementary and indicate that fact. Something like departure_airport_code and arrival_airport_code, for example, would be much more meaningful.

ORA-00922 means that SQL parser found an invalid option where should be empty or one of other valid options it expects.

Since it’s a broadly used error, the root cause could be very different from case to case.

ALTER USER

Case 1

Tried to grant some quota on tablespace to an user, but it failed with ORA-00922.

SQL> alter user hr quota 100g on tablespace users;
alter user hr quota 100g on tablespace users
                                       *
ERROR at line 1:
ORA-00922: missing or invalid option

In this case, the keyword TABLESPACE shall not be used in this clause, just use a normal tablespace name after ON.

SQL> alter user hr quota 100g on users;

User altered.

Case 2

Tried to lock an user, but it failed with ORA-00922.

SQL> alter user hr lock;
alter user hr lock
              *
ERROR at line 1:
ORA-00922: missing or invalid option

In the above, we missed the keyword ACCOUNT before LOCK.

SQL> alter user hr account lock;

User altered.

CREATE TABLE

Case 1

Tried to use CTAS to create a table to another tablespace, but it failed with ORA-00922.

SQL> create table t2 tablespace users select * from t1;
create table t2 tablespace users select * from t1
                                 *
ERROR at line 1:
ORA-00922: missing or invalid option

In the above, we missed the keyword AS before SELECT.

SQL> create table t2 tablespace users as select * from t1;

Table created.

Case 2

Tried to use CTAS to create a table to another tablespace, but it failed with ORA-00922.

SQL> create table t2 users as select * from t1;
create table t2 users as select * from t1
                *
ERROR at line 1:
ORA-00922: missing or invalid option

In the above, we missed the keyword TABLESPACE before the tablespace name USERS.

SQL> create table t2 tablespace users as select * from t1;

Table created.

Ошибка Ora 00922 является одной из часто встречающихся ошибок при создании таблицы в Системе управления базами данных Oracle. Эта ошибка указывает на отсутствие или недействительность опции create table.

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

При возникновении ошибки Ora 00922 необходимо внимательно проверить правильность написания ключевых слов и опций при создании таблицы, а также синтаксис запроса. Часто ошибки возникают из-за неправильного использования символов или неверной последовательности команд.

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

Содержание

  1. Определение и причины ошибки
  2. Как исправить ошибку Ora 00922
  3. Примеры кода, вызывающего ошибку
  4. Полезные советы для предотвращения ошибки

Определение и причины ошибки

Ошибка ORA-00922 происходит при создании таблицы в базе данных Oracle и указывает на отсутствие или недействительность опции CREATE TABLE. Эта ошибка может возникать по разным причинам, но основные причины включают:

1. Опечатки или неверное использование ключевого слова CREATE TABLE. В случае опечатки или неверного использования ключевого слова, Oracle не сможет правильно распознать команду и сообщит об ошибке.

2. Неверное использование синтаксиса команды CREATE TABLE. Например, указание недействительного имени таблицы или недопустимых опций при создании таблицы может привести к ошибке ORA-00922.

3. Недостаточно привилегий. В некоторых случаях, пользователь может не иметь достаточных прав для создания таблицы в базе данных. В этом случае, Oracle сообщит об ошибке ORA-00922.

4. Устаревшая версия Oracle. Старые версии Oracle могут не поддерживать определенные опции CREATE TABLE, что также может вызывать ошибку ORA-00922.

Как исправить ошибку Ora 00922

Ошибка Ora 00922 возникает, когда в команде создания таблицы в базе данных Oracle отсутствует или указана недействительная опция. Это может произойти из-за синтаксической ошибки или неправильного использования команды.

Для исправления ошибки Ora 00922 рекомендуется выполнить следующие действия:

  1. Проверьте синтаксис команды создания таблицы. Убедитесь, что вы правильно указали все необходимые параметры и опции.
  2. Убедитесь, что вы используете правильную версию Oracle. Некоторые опции могут быть доступны только в определенных версиях, поэтому проверьте документацию Oracle для вашей версии.
  3. Если вы копируете и вставляете команду из другого источника, убедитесь, что вставленный текст не содержит скрытых символов или ошибок.
  4. Проверьте наличие необходимых разрешений для создания таблицы. Убедитесь, что у вас есть достаточные привилегии для выполнения данной операции.
  5. Если вы используете специфические опции создания таблицы, проверьте их совместимость с другими опциями и параметрами.
  6. Посмотрите на сообщения об ошибках и предупреждениях, которые выводятся при выполнении команды. Они могут содержать полезную информацию о причинах ошибки.
  7. Если ничто из вышеперечисленного не помогло, попробуйте создать таблицу с минимальным количеством опций. Если это успешно, добавляйте опции по одной, чтобы определить, какая из них вызывает ошибку.

Следуя этим рекомендациям, вы сможете исправить ошибку Ora 00922 и успешно создать таблицу в базе данных Oracle.

Примеры кода, вызывающего ошибку

Ниже приведены несколько примеров кода, которые могут вызывать ошибку Ora 00922: отсутствует или недействительная опция create table:

  1. Пример 1:

    CREATE TABLE employees
    employee_id NUMBER PRIMARY KEY,
    first_name VARCHAR2(50),
    last_name VARCHAR2(50)
    );

    Описание ошибки: при создании таблицы необходимо указывать тип данных для каждого столбца. В данном примере отсутствует тип данных для столбца employee_id.

  2. Пример 2:

    CREATE TABLE orders
    order_id NUMBER PRIMARY KEY,
    customer_id NUMBER REFERENCES customers(customer_id),
    order_date DATE,
    status VARCHAR2(20);
    );

    Описание ошибки: в данном примере пропущена закрывающая скобка после объявления столбца status. Это приводит к ошибке синтаксиса.

  3. Пример 3:

    CREATE TABLE products
    product_id NUMBER PRIMARY KEY,
    product_name VARCHAR2(50),
    price NUMBER(10, 2)
    category_id NUMBER REFERENCES categories(category_id)
    );

    Описание ошибки: в данном примере пропущена запятая после объявления столбца price. Такой синтаксический недочёт приведёт к ошибке синтаксиса.

Полезные советы для предотвращения ошибки

Ошибки Ora 00922: отсутствует или недействительная опция create table могут возникать при работе с базами данных Oracle. Эти ошибки обычно возникают из-за неправильного использования команды CREATE TABLE, которая используется для создания новой таблицы в базе данных.

Чтобы предотвратить появление ошибки Ora 00922, следуйте следующим советам:

  • Проверьте синтаксис команды CREATE TABLE. Убедитесь, что вы правильно указали все необходимые опции, такие как название таблицы, названия столбцов и их типы данных.
  • Убедитесь, что вы не используете недействительные или устаревшие опции команды CREATE TABLE. Проверьте документацию Oracle для актуального списка поддерживаемых опций.
  • Проверьте права доступа к базе данных. Убедитесь, что у вас есть достаточные привилегии для создания таблицы в указанной схеме или пользователе.
  • Убедитесь, что вы используете последнюю версию Oracle Database. Некоторые ошибки могут быть исправлены в более новых версиях программного обеспечения.
  • Избегайте опечаток. Проверьте дважды все названия таблиц, столбцов и опций команды CREATE TABLE, чтобы исключить возможность опечаток.
  • Используйте среду разработки или инструмент, который предоставляет автодополнение и подсказки для команды CREATE TABLE. Это поможет вам избежать опечаток и использовать правильные опции.
  • Проверьте логи ошибок. Если вы все еще испытываете проблемы, проверьте логи ошибок Oracle Database для получения более подробной информации о причине возникновения ошибки.

Следуя этим советам, вы сможете предотвратить ошибку Ora 00922 и успешно создавать таблицы в базе данных Oracle.

oracle tutorial webinars

ORA-00922

ORA-00922: missing or invalid option is one of many Oracle errors, which does not point to a concrete and easily identifiable problem. The key to resolving this issue is to find the specific location of the error (which can be tedious) and correct its syntax. A small error such as a misplaced comma or missing quotation mark can throw this error. To make things easier, use a good integrated development environment software application to help identify syntactical errors that are hard to catch on your own.

The Problem

ORA-00922: missing or invalid option occurs if an invalid option is specified while defining a storage clause or column. Oracle provides the following information about this error:

Cause: The valid option in specifying a column is NOT NULL to specify that the column cannot contain any NULL values. Only constraints may follow the datatype. Specifying a maximum length on a DATE or LONG datatype also causes this error.

The Solution

Resolving ORA-00922: missing or invalid option can be tricky as the error does not appear due to one, universal cause. Oracle simply states that the syntax must be corrected. The user must remove the erroneous option or length specification from the column or storage specification.

In the following example, a table named employee is created:

CREATE table employee
(employee_id(5) NOT NULL, employee_name varchar2(30) employment_length varchar2 (40))

While this code seems correct at first glance, there is a missing comma after “employee_name varchar2(30),” throwing off the entire code and warranting ORA-00922 error message. The corrected code should read:

CREATE table employee
(employee_id(5) NOT NULL, employee_name varchar2(30), employment_length varchar2 (40))

ORA-00922: missing or invalid option is commonly seen during the installation process, specifically when creating new passwords. It installer may state that the user cannot be created along with the message: “missing or invalid option.” In such cases, the error is likely occurring because you are attempting to create a password that is complex. Changing the password to a less complex, weaker password will allow you to resolve the error and complete the installation successfully. Note that you can change the password to a stronger one after the installation is complete.

Moving Forward

If you continue to face problems with ORA-00920: missing or invalid option, you may consider contacting your database administrator for assistance if you yourself are not the DBA. Another option may be to contact an Oracle professional to resolve the issue. Remember to always check the consultant’s credentials and certification to ensure your Oracle needs are properly met.

  • Ошибка openvpn connection reset restarting 0
  • Ошибка ora 00918 column ambiguously defined
  • Ошибка openservice failed 1060
  • Ошибка openserver одновременный запуск
  • Ошибка openscmanager failed 0x5