→ Исключения (ошибки) в Oracle. Oracle errors: ошибки базы, объяснение и действия по устранению Группы ошибок Oracle

Исключения (ошибки) в Oracle. Oracle errors: ошибки базы, объяснение и действия по устранению Группы ошибок Oracle

In this chapter, we will discuss Exceptions in PL/SQL. An exception is an error condition during a program execution. PL/SQL supports programmers to catch such conditions using EXCEPTION block in the program and an appropriate action is taken against the error condition. There are two types of exceptions −

  • System-defined exceptions
  • User-defined exceptions

Syntax for Exception Handling

The general syntax for exception handling is as follows. Here you can list down as many exceptions as you can handle. The default exception will be handled using WHEN others THEN

DECLARE BEGIN EXCEPTION WHEN exception1 THEN exception1-handling-statements WHEN exception2 THEN exception2-handling-statements WHEN exception3 THEN exception3-handling-statements ........ WHEN others THEN exception3-handling-statements END;

Example

Let us write a code to illustrate the concept. We will be using the CUSTOMERS table we had created and used in the previous chapters −

DECLARE c_id customers.id%type:= 8; c_name customerS.Name%type; c_addr customers.address%type; BEGIN SELECT name, address INTO c_name, c_addr FROM customers WHERE id = c_id; DBMS_OUTPUT.PUT_LINE ("Name: "|| c_name); DBMS_OUTPUT.PUT_LINE ("Address: " || c_addr); EXCEPTION WHEN no_data_found THEN dbms_output.put_line("No such customer!"); WHEN others THEN dbms_output.put_line("Error!"); END; /

No such customer! PL/SQL procedure successfully completed.

The above program displays the name and address of a customer whose ID is given. Since there is no customer with ID value 8 in our database, the program raises the run-time exception NO_DATA_FOUND , which is captured in the EXCEPTION block .

Raising Exceptions

Exceptions are raised by the database server automatically whenever there is any internal database error, but exceptions can be raised explicitly by the programmer by using the command RAISE . Following is the simple syntax for raising an exception −

DECLARE exception_name EXCEPTION; BEGIN IF condition THEN RAISE exception_name; END IF; EXCEPTION WHEN exception_name THEN statement; END;

You can use the above syntax in raising the Oracle standard exception or any user-defined exception. In the next section, we will give you an example on raising a user-defined exception. You can raise the Oracle standard exceptions in a similar way.

User-defined Exceptions

PL/SQL allows you to define your own exceptions according to the need of your program. A user-defined exception must be declared and then raised explicitly, using either a RAISE statement or the procedure DBMS_STANDARD.RAISE_APPLICATION_ERROR .

The syntax for declaring an exception is −

DECLARE my-exception EXCEPTION;

Example

The following example illustrates the concept. This program asks for a customer ID, when the user enters an invalid ID, the exception invalid_id is raised.

DECLARE c_id customers.id%type:= &cc_id; c_name customerS.Name%type; c_addr customers.address%type; -- user defined exception ex_invalid_id EXCEPTION; BEGIN IF c_id <= 0 THEN RAISE ex_invalid_id; ELSE SELECT name, address INTO c_name, c_addr FROM customers WHERE id = c_id; DBMS_OUTPUT.PUT_LINE ("Name: "|| c_name); DBMS_OUTPUT.PUT_LINE ("Address: " || c_addr); END IF; EXCEPTION WHEN ex_invalid_id THEN dbms_output.put_line("ID must be greater than zero!"); WHEN no_data_found THEN dbms_output.put_line("No such customer!"); WHEN others THEN dbms_output.put_line("Error!"); END; /

When the above code is executed at the SQL prompt, it produces the following result −

Enter value for cc_id: -6 (let"s enter a value -6) old 2: c_id customers.id%type:= &cc_id; new 2: c_id customers.id%type:= -6; ID must be greater than zero! PL/SQL procedure successfully completed.

Pre-defined Exceptions

PL/SQL provides many pre-defined exceptions, which are executed when any database rule is violated by a program. For example, the predefined exception NO_DATA_FOUND is raised when a SELECT INTO statement returns no rows. The following table lists few of the important pre-defined exceptions −

Exception Oracle Error SQLCODE Description
ACCESS_INTO_NULL 06530 -6530 It is raised when a null object is automatically assigned a value.
CASE_NOT_FOUND 06592 -6592 It is raised when none of the choices in the WHEN clause of a CASE statement is selected, and there is no ELSE clause.
COLLECTION_IS_NULL 06531 -6531 It is raised when a program attempts to apply collection methods other than EXISTS to an uninitialized nested table or varray, or the program attempts to assign values to the elements of an uninitialized nested table or varray.
DUP_VAL_ON_INDEX 00001 -1 It is raised when duplicate values are attempted to be stored in a column with unique index.
INVALID_CURSOR 01001 -1001 It is raised when attempts are made to make a cursor operation that is not allowed, such as closing an unopened cursor.
INVALID_NUMBER 01722 -1722 It is raised when the conversion of a character string into a number fails because the string does not represent a valid number.
LOGIN_DENIED 01017 -1017 It is raised when a program attempts to log on to the database with an invalid username or password.
NO_DATA_FOUND 01403 +100 It is raised when a SELECT INTO statement returns no rows.
NOT_LOGGED_ON 01012 -1012 It is raised when a database call is issued without being connected to the database.
PROGRAM_ERROR 06501 -6501 It is raised when PL/SQL has an internal problem.
ROWTYPE_MISMATCH 06504 -6504 It is raised when a cursor fetches value in a variable having incompatible data type.
SELF_IS_NULL 30625 -30625 It is raised when a member method is invoked, but the instance of the object type was not initialized.
STORAGE_ERROR 06500 -6500 It is raised when PL/SQL ran out of memory or memory was corrupted.
TOO_MANY_ROWS 01422 -1422 It is raised when a SELECT INTO statement returns more than one row.
VALUE_ERROR 06502 -6502 It is raised when an arithmetic, conversion, truncation, or sizeconstraint error occurs.
ZERO_DIVIDE 01476 1476 It is raised when an attempt is made to divide a number by zero.

к.п.н. Владимир Лихачёв, Калужский педагогический университет им К.Э.Циолковского

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

Как ни странно, ситуация с формированием сообщений об ошибках в программах довольно часто сильно отличается от обработки самих ошибок. При обработке ошибок обычно удается выработать общую стратегию, что позволяет локализовать их обработку в одной или нескольких функциях. Аналогичный подход для сообщений об ошибках может быть реализован на основе того, что в сообщении об ошибке сервер Oracle указывает тип ошибки и объект базы данных, который явился причиной её возникновения. Такими объектами обычно являются ограничения, как, например, первичные, уникальные и внешние ключи, уникальные индексы, ограничения "not null" и др. Из системных таблиц и представлений базы данных может быть получена подробная информация об этих ограничениях и определены значения, изменение которых и привело к возникновению ошибки. Но проблема заключается в том, что реализация такого механизма формирования сообщений об ошибках в реальных приложениях встречает целый ряд сложностей:

  • Зависимость сообщения об ошибке от назначения программы. Даже для программ, работающих с одной и той же базой данных, может потребоваться формирование различных сообщений об одной и той же ошибке. Например, в программе для редактирования данных пользователем сообщение должно быть: "Товар с таким названием уже зарегистрирован! Проверьте название товара!". А в программе импорта данных требуется сообщение с совершенно другим содержанием: "Импортируемые данные дублируются - проверьте дату, за которую выполняется импорт данных!".
  • Сложность формирования сообщений для некоторых ошибок, вызванных ограничениями базы данных. Например, в ограничениях CHECK для таблиц могут использоваться довольно сложные запросы и условия. Поэтому формирование сообщений на основе их анализа может оказаться довольно сложной задачей.
  • Использование в клиентских программах пользовательских названий таблиц и столбцов, отличных от их имен в БД. Например, таблица имеет имя "GOODS", а в клиентском приложении данные этой таблицы могут отображаться в справочнике как "Товары" или "Продукция".

Совокупность этих факторов обычно приводит к тому, что формирование сообщений даже об однотипных ошибках реализуется индивидуально для каждой транзакции. В результате код для формирования сообщений об ошибках оказывается распределенным по всему приложению, что усложняет его сопровождение. Из-за необходимости написания кода практически для каждой возможной ошибки, часть ошибок, о которых известно разработчику, оказываются без соответствующих сообщений для пользователя. В результате достаточно информативные сообщения для конечного пользователя формируются только для некоторой части ошибок, в остальных же случаях ему остается довольствоваться в лучшем случае сообщениями от самого сервера базы данных. Информативность таких сообщений для обычного пользователя в большинстве случаев недостаточна для выявления причины возникшей проблемы и её устранения.

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

  • Программы, использующие специальный интерфейс для ввода и изменения данных БД. В большинстве случаев информативные сообщения об ошибках могут быть получены на основе анализа структуры базы данных. Это позволит информировать пользователя об их причине с минимальными затратами усилий со стороны разработчиков и программного обеспечения.
  • Программы с возможностью построения пользователем произвольных SQL-запросов. Формирование сообщений на основе анализа структуры базы данных может быть особенно актуально для программ, которые ориентированы на широкий круг пользователей, в том числе и с низким уровнем знаний в этой области. Это позволит сделать более понятными для пользователя сообщения об ошибках в SQL-запросах.
  • Предметные платформы. Использование методов, описанных в статье, позволит самой предметной платформе формировать информативные сообщения об ошибках базы данных на основе анализа её структуры. Это даст возможность сократить код на языке платформы, используемый для обработки ошибочных ситуаций. А ошибки, которые требуют специальных сообщений, но оказались без таковых, будут достаточно информативными для того, чтобы намного упростить выявление их причины.

Описанные выше проблемы формирования сообщений могут быть решены, если сообщения об ошибках условно разделить на две группы:

  • универсальные сообщения, которые формируются на основе анализа структуры базы данных;
  • специальные сообщения, которые определяются индивидуально для каждой ошибки.

Описываемый в статье метод формирования сообщений об ошибках БД может быть применён для многих серверов реляционных баз данных. Пример его использования для баз данных сервера Firebird рассматривается в статье . Если клиентское приложение разработано на Object Pascal (Delphi, Kylix, Free Pascal), то для выявления причин непредвиденных ошибок могут быть полезны возможности библиотеки JEDI .

1. Универсальные сообщения об ошибках, вызванных ограничениями БД

Как уже говорилось выше, основная идея создания универсальных сообщений заключается в том, чтобы на основе данных из сообщения об ошибке от Oracle и о структуре базы данных сформировать достаточно информативное и понятное для конечного пользователя сообщение. Предположим, в таблицу "GOODS" (скрипт 1.1) пользователь пытается добавить товар с названием (столбец "TITLE"), которое уже имеется в таблице.

CREATE TABLE DEMO.GOODS (CODE INTEGER NOT NULL , TITLE VARCHAR2(50 byte) NOT NULL , PRICE NUMBER(16, 2) NOT NULL , CONSTRAINT CK_PRICE CHECK (PRICE > 0), CONSTRAINT PK_GOODS PRIMARY KEY (CODE)); COMMENT ON TABLE DEMO.GOODS is "Товары"; COMMENT ON COLUMN DEMO.GOODS.CODE is "Код товара"; COMMENT ON COLUMN DEMO.GOODS.TITLE is "Название"; COMMENT ON COLUMN DEMO.GOODS.PRICE is "Цена"; CREATE UNIQUE INDEX DEMO.IDX_GOODS_TITLE ON DEMO.GOODS (TITLE);

Скрипт 1.1. Создание таблицы "GOODS".

Сервер в этом случае сгенерирует ошибку, так как столбец "TITLE", в котором хранится название товара, включено в уникальный индекс "DEMO.IDX_GOODS_TITLE":

Вместо этого сообщения для пользователя может быть сформировано, например, одно из сообщений:

  • Значение поля "Название" в таблице "Товары" должно быть уникальным!
  • Товар с таким названием уже зарегистрирован! Проверьте название товара!
  • В справочнике товаров не могут быть товары с одинаковыми названиями!

Хотя эти сообщения и различаются, но в них всех указывается информация об объекте, для которого нарушено ограничение уникальности - это поле "Название" таблицы "Товары".

Одна из проблем формирования такого типа сообщений, заключается в том, что пользовательские названия полей и таблиц, отличаются от имен таблиц и столбцов в базе данных. Чтобы пользователю было понятно сообщение об ошибке, в нем должны использоваться именно пользовательские названия. Для сопоставления имен таблиц и полей и их пользовательских названий может использоваться отдельная таблица или комментарии для таблиц и столбцов. Последний вариант можно считать более предпочтительным, так как это позволяет одновременно документировать базу данных. Именно поэтому в скрипте 1.1 в качестве комментариев для таблицы и её столбцов приведены их пользовательские названия. Если сравнить выше приведённые сообщения и комментарии для таблицы и столбцов, то можно заметить, что формирование первого сообщения является наиболее простым вариантом. Для формирования двух других сообщений может потребоваться лексический синтез, но это уже отдельная задача. Хочется обратить внимание, что в дальнейшем в статье приводится только один из возможных вариантов сообщения для каждого случая ошибки. На практике выбор стиля сообщения и его содержания может зависеть от целого ряда факторов и будет определяться разработчиком системы.

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

2. Не указано значение поля, обязательного для заполнения (ограничение NOT NULL)

Эта ошибка генерируется сервером в нескольких случаях:

  • нарушено ограничение "not null", установленное для столбца;
  • не указано значение столбца, входящего в уникальный индекс, главный или уникальный ключи.

Во всех этих случаях сервер генерирует ошибку:

Для получения описания таблицы и столбца из сообщения об ошибке, можно использовать запрос 2.1.

select tc.comments as table_comment, cc.comments as column_comment from all_tab_columns c, all_tab_comments tc, all_col_comments cc where c.owner = :owner and c.table_name = :table_name and c.column_name = :column_name and tc.owner = c.owner and tc.table_name = c.table_name and cc.owner = c.owner and cc.table_name = c.table_name and cc.column_name = c.column_name

Запрос 2.1. Получение описания таблицы и столбца

В качестве параметров запроса "owner", "table_name", "column_name" необходимо указать соответственно имя схемы, таблицы и столбца из сообщения об ошибке. Запрос возвращает комментарии для таблицы и столбца.

Используя результаты этого запроса, может быть сформировано сообщение об ошибке, например, следующего содержания:

Необходимо указать значение столбца "<Описание поля>" в таблице "<Описание таблицы>" при <добавлении новой/изменении> записи.

3. Нарушена уникальность значения поля или набора столбцов

Необходимость ввода уникального значения столбца может требоваться в основном в трех случаях:

  • столбец входит в главный ключ;
  • столбец включен в уникальный ключ;
  • столбец входит в уникальный индекс.

Во всех трех случаях Oracle Database генерирует одну и ту же ошибку:
ORA-00001: нарушено ограничение уникальности (<Схема>.<Ограничение>)

В сообщении об ошибке указывается ограничение, которое вызвало ошибку. Для получения информации о столбцах, входящих в главный или уникальный ключи, можно использовать запрос 3.1, для получения информации об индексе - запрос 3.2.

select dcs.constraint_type, cc.table_name, tc.comments as table_comment, cc.column_name, ccom.comments as column_comment from all_cons_columns cc join all_tab_comments tc on (tc.owner = cc.owner and tc.table_name = cc.table_name) join all_col_comments ccom on (ccom.owner = cc.owner and ccom.table_name = cc.table_name and ccom.column_name = cc.column_name) join all_constraints dcs on (dcs.constraint_name = cc.constraint_name) where cc.owner = :owner and cc.constraint_name = :key_name
Запрос 3.1. Получение информации о столбцах таблицы, входящих в главный или уникальный ключи.
select ic.table_name, tc.comments as table_comment, ic.column_name, ccom.comments as column_comment from all_ind_columns ic join all_tab_comments tc on (tc.owner = ic.table_owner and tc.table_name = ic.table_name) join all_col_comments ccom on (ccom.owner = ic.table_owner and ccom.table_name = ic.table_name and ccom.column_name = ic.column_name) where table_owner = :owner and index_name = :index_name
Запрос 3.2. Получение информации о столбцах таблицы, входящих в индекс.

В качестве параметров запросам передаётся имя схемы ("owner"), имя ключа ("key_name") или индекса ("index_name"). Запросы возвращают имена и комментарии для таблиц и столбцов, входящих в ограничение. Запрос 3.1 возвращает так же тип ограничения ("constraint_type"): "P" - главный ключ, "U" - уникальный ключ. Количество записей, возвращаемых запросами, соответствует количеству столбцов в ограничении уникальности.

На основе полученной информации об ограничении уникальности для пользователя могут быть сформированы варианты сообщений об ошибке, например, приведенные в разделе 1.

4. Ошибки, вызываемые ограничениями внешних ключей

При выполнении операций над табличными данными, связанными внешними ключами, можно выделить несколько причин, приводящих к возникновению ошибок:

1. В подчинённую таблицу добавляется запись, в которой для столбца, входящего во внешний ключ, нет соответствующего значения в главной таблице. Аналогичная ситуация происходит при изменении значения столбца подчиненной таблицы в случае, если нового значения столбца нет в главной таблице. Oracle Database в этом случае генерирует ошибку:

  1. В главной таблице выполняется попытка изменения значения столбца, на которое имеется ссылка в подчиненной таблице. Для этого случая Oracle Database генерирует ошибку:
  1. В главной таблице выполняется попытка удаления данных, на которые имеется ссылка в подчиненной таблице. Если в определении связи между таблицами указано ограничение "NO ACTION" для операции удаления данных, то Oracle не позволяет удалять данные из главной таблицы, если в подчинённой таблице есть записи связанные с удаляемой записью. Для этой ситуации Oracle Database генерирует ошибку, аналогичную предыдущему случаю.

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

select a.constraint_name, a.table_name, tc1.comments as table_comment, a2.column_name, cc1.comments as column_comment, b.owner as r_owner, b.table_name as r_table_name, tc2.comments as r_table_comment, b2.column_name as r_column_name, cc2.comments as r_column_comment from all_constraints a, all_constraints b, all_cons_columns a2, all_cons_columns b2, all_tab_comments tc1, all_col_comments cc1, all_tab_comments tc2, all_col_comments cc2 where a.owner = :owner and a.constraint_type = "R" and a.constraint_name = :foreign_key and b.constraint_type in ("P","U") and b.constraint_name = a.r_constraint_name and b.owner = a.r_owner and a2.constraint_name = a.constraint_name and a2.table_name = a.table_name and a2.owner = a.owner and b2.constraint_name = b.constraint_name and b2.table_name = b.table_name and b2.owner = b.owner and b2.position = a2.position and tc1.owner = a.owner and tc1.table_name = a.table_name and cc1.owner = a2.owner and cc1.table_name = a2.table_name and cc1.column_name = a2.column_name and tc2.owner = b.owner and tc2.table_name = b.table_name and cc2.owner = b2.owner and cc2.table_name = b2.table_name and cc2.column_name = b2.column_name
Запрос 4.1. Получение информации о внешнем ключе.

Запрос имеет два параметра: "owner" и "foreign_key" - схема и внешний ключ, о котором необходимо получить информацию. Он возвращает информацию о столбцах, входящих во внешний ключ: "table_name", "table_comment" - имя и описание подчиненной таблицы; "column_name", "column_comment" - имя и описание столбца подчиненной таблицы. Столбцы запроса с префиксом "r_" возвращают информацию о главной таблице. Количество записей возвращаемых запросом соответствует количеству столбцов, входящих во внешний ключ.

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

5. Специальные сообщения об ошибках, вызванных ограничениями БД

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

Можно выделить две группы специальных сообщений об ошибках. Первый тип специальных сообщений предназначен для использования во всех приложениях, которые работают c общей базой данных. Их можно условно назвать "специальные сообщения об ошибках уровня базы данных". Вторая группа сообщений специфична для конкретного приложения. Они могут быть необходимы, когда различные приложения должны выдавать пользователю различные сообщения об одной и той же ошибке. Их можно условно назвать "специальные сообщения об ошибках уровня приложения". Информацию о первой группе сообщений удобно хранить в самой базе данных и использовать для этого отдельную таблицу. Сообщения, специфичные для программы могут храниться в её ресурсах, например, в виде отдельного файла или также в БД. Идентификация специальных сообщений может выполняться на основе кода ошибки, имени схемы и одного или нескольких ключевых слов из сообщения об ошибке.

6. Сообщения об ошибках ограничений CHECK для таблиц

При возникновении ошибки, вызванной ограничением CHECK для таблицы, сервер генерирует ошибку:
ORA-02290: нарушено ограничение целостности CHECK (<Схема>.<Имя ограничения>)

Как уже говорилось выше, для таких ошибок часто удобно использовать специальные сообщения. Например, для ограничения "CK_PRICE" таблицы "GOODS" может использоваться специальное сообщение, хранимое в таблице специальных сообщений:

7. Комплексное использование специальных и универсальных сообщений об ошибках

Гибкий механизм формирования информативных сообщений об ошибках для пользователя реализуется в несколько этапов (рис. 1):

1. Вывод специального сообщения об ошибке уровня приложения. Сначала программа выполняет поиск сообщения об ошибке среди специальных сообщений для данного приложения. Если такое сообщение найдено, оно выводится, и формирование сообщения на этом завершается.

2. Вывод специального сообщения об ошибке уровня базы данных. Если на этапе 1 сообщение не было найдено, выполняется поиск специального сообщения об ошибке уровня базы данных. Если найдено, то оно выводится пользователю и формирование сообщения об ошибке на этом заканчивается.

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

4. Вывод сообщения от сервера базы данных. В случае, если на трех предыдущих этапах сообщение для пользователя не было сформировано, то отображается сообщение об ошибке от Oracle. Такая ситуация может возникнуть по нескольким причинам. Например, при возникновении пользовательской ошибки, которая была преднамеренно сгенерирована в хранимой процедуре или триггере c помощью функции RAISE_APPLICATION_ERROR, и изменение содержания сообщения о которой не требуется.

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

В ряде случаев такие сообщения могут быть даже более информативными, чем сформированные на предыдущих этапах. Например, вместо ограничения CK_PRICE для таблицы DEMO.GOODS (скрипт 1.1) можно в триггере перед вставкой и обновлением записи выполнять необходимую проверку и генерировать сообщение для пользователя в уже "готовом" виде:

В случае цены товара меньшей или равной нулю сервер сгенерирует ошибку, например:

Клиентское приложение может сразу передать это сообщение пользователю без изменения.

Другой причиной может быть появление ошибки, для которой формирование сообщения не предусмотрено.

Рис. 1. Последовательность формирования сообщения об ошибке базы данных.

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

Заключение

Целью данной статьи является показать основные идеи метода, который может использоваться для формирования информативных сообщений об ошибках базы данных Oracle для конечного пользователя. Хотя за рамками статьи остались некоторые моменты реализации, хочется надеяться, что описанный в статье подход позволит уменьшить трудозатраты при разработке программного обеспечения, повысить его надежность и качество.

При выполнении кода PL/SQL могут возникнуть ошибки, которые вызовут прекращение выполнения блока PL/SQL. Такие ошибки создают исключения, которые можно перехватывать и обрабатывать с помощью обработчика исключений.

Исключение – переменная PL/SQL, возбуждаемая во время выполнения блока и прекращающая выполнение действий в теле блока. Если Ваш блок PL/SQL содержит секцию обработки исключений, Вы можете определить действия, которые должны быть выполнены для того или иного исключения перед завершением блока.

Исключение возбуждается автоматически сервером Oracle в случае возникновения ошибки Oracle (TOO_MANY_ROWS, NO_DATA_FOUND). Однако Вы можете определить свое собственное исключение в декларативной секции блока PL/SQL и, затем, явно возбудить его в исполняемой секции блока.

Если в исполняемой секции блока возбуждается исключение, управление передается секции обработки исключений (секции EXCEPTION). В том случае, если исключение будет успешно обработано, блок PL/SQL завершится без ошибок. Если же обработчика для этого исключения нет, выполнение блока PL/SQL прекратится в аварийном порядке.

Имеется три типа исключений:

Перехват исключений

Перехват исключений осуществляется в секции обработки исключений блока PL/SQL.

EXCEPTION

WHEN исключение_1 [ OR исключение_2 ...] THEN

операторы ;

WHEN исключение_3 [ OR исключение_4 ...] THEN

операторы ;

исключение – имя предопределенного исключения или исключения, описанного в декларативной секции

WHEN OTHERS – определяет действия по обработке всех исключений, обработка для которых не задана явно

Секция обработки исключений начинается ключевым словом EXCEPTION. В секцию обработки исключений можно включить несколько обработчиков исключений, каждый из которых выполняет собственную группу операторов. Если в исполняемой секции блока PL/SQL возбуждается исключение, управление передается в секцию обработки исключений тому обработчику, который предназначен для обработки именно этого исключения. После выполнения действий, заданных в этом обработчике, выполнение блока прекращается без ошибок.

Вы можете определить действия, которые должны быть выполнены в случае возбуждения любых исключений, обработчик которых не определен явно. Для этого используется предложение WHEN OTHERS. Предложение WHEN OTHERS может быть только одно и помещается после всех остальных обработчиков исключений.

Перехват предопределенных исключений сервера Oracle

Перехват предопределенных ошибок сервера Oracle осуществляется путем ссылки на стандартное имя исключения в секции обработки исключений.

Имя исключения

Номер ошибки

Описание

CURSOR_ALREADY_OPEN

Попытка открыть курсор, который уже открыт

DUP_VAL_ON_INDEX

Попытка выполнить неразрешенную операцию с курсором (закрытие неоткрытого курсора)

Попытка конвертировать символьное значение в численное в утверждении SQL, если символьное значение не представляет собой символьное представление числа

Попытка соединиться с базой данных с неправильным именем пользователя и/или паролем

Утверждение SELECT INTO не вернуло ни одной строки

Попытка обратиться к базе данных, не соединившись с ней

Внутренняя ошибка PL/SQL

Недостаточно памяти

SYS_INVALID_ROWID

Попытка конвертировать символьное значение в ROWID, если символьное значение не представляет собой корректное символьное представление ROWID

TIMEOUT_ON_RESOURCE

Время ожидания ресурса истекло

Утверждение SELECT INTO вернуло более одной строки

Ошибка вычислений, преобразования типов, нарушение размерности

Попытка деления на ноль

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

v_sal emp.sal%TYPE;

SELECT sal INTO v_sal FROM emp WHERE LOWER(job)=LOWER(:v_job);

DBMS_OUTPUT.put_line("Salary of " || :v_job || " is " || TO_CHAR(v_sal));

WHEN NO_DATA_FOUND THEN

DBMS_OUTPUT.put_line(:v_job || " is not a title of employees");

WHEN TOO_MANY_ROWS THEN

DBMS_OUTPUT.put_line(:v_job || " is a title of many employees");

WHEN OTHERS THEN

DBMS_OUTPUT.put_line("Other error occurred");

Теперь рассмотрим различные варианты, присваивая разные значения хост-переменной v_ job .

SQL> VARIABLE v_job VARCHAR2(20)

SQL> EXECUTE:v_job:= "President"

SQL> @d:\users\except

Salary of President is 5000

PL/SQL procedure successfully completed.

SQL> EXECUTE:v_job:= "Clerk"

PL/SQL procedure successfully completed.

SQL> @d:\users\except

Clerk is a title of many employees

PL/SQL procedure successfully completed.

SQL> EXECUTE:v_job:= "Engineer"

PL/SQL procedure successfully completed.

SQL> @d:\users\except

Engineer is not a title of employees

PL/SQL procedure successfully completed.

Перехват неопределенных исключений сервера Oracle

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

При возникновении исключительных ситуаций важно выдавать дружест­венные к пользователю сообщения об ошибках. Об исключениях уже упоминалось в разделе, посвященном базовым блокам PL/SQL. Теперь настало время рассмотреть их подробнее.

Исключения

Исключение – это состояние ошибки, которое активизируется – или возбуждается – при возникновении некоторой проблемы. Существует много разных исключений, каждое из которых связано с определенным типом проблем. При возникновении исключительной ситуации выполнение кода останавливается на операторе, который возбудил исключение, и управление передается той части блока, которая обрабатывает это исключение. Если блок не содержит выполняемой секции, PL/SQL пытается найти выполняемую секцию во включающем базовом блоке (enclosing basic block), т.е. в блоке, который является внешним по отношению к коду, возбудившему исключение. Если в непосредственном включающем блоке отсутствует обработчик данного исключения, то поиск продолжается в блоках следующих уровней, пока не будет найден подходящий обработчик, а если его найти не удается, то выполнение программы прекращается с выдачей сообщения о необрабатываемой ошибке.

Часть блока, предназначенная для обработки исключений, – это идеальное место для выдачи информативных сообщений об ошибках и выполнения очистки (cleanup), позволяющей избавиться от всего, что могло бы в дальнейшем вызвать путаницу или проблемы. Если исключение было возбуждено в ходе выполнения процедуры вставляющей строки в таблицу, то типичная процедура очистки может включать в себя оператор ROLLBACK.

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

Системные исключения

Вы уже знакомы с исключением ZERO_DIVIDE, предопределенным в PL/SQL. Существует довольно много других системных исключений, которые распознаются и возбуждаются PL/SQL или Oracle. В таблице 1 приведен более полный список системных исключений.

В PL/SQL можно выдавать пользователям информацию об ошибке двумя способами. Первый способ – использовать команду SQLCODE, которая возвращает код ошибки. Этот код представляет собой отрицательное число, обычно равное номеру ошибки ORA, которая выводится при завершении приложения, если исключение осталось необработанным. Второй способ – возвращать текстовое сообщение, описывающее ошибку. Неудивительно, что соответствующая команда называется SQLERRM. В обработчике исключения можно использовать как SQLCODE, так и SQLERRM. Замечание: не у всех системных исключений есть имена.

Таблица 1 . Системные исключения

Системное исключение, код ошибки

Причина возбуждения

CURSOR _ ALREADY _ OPEN

ORA -06511

Попытка открыть уже открытый курсор

DUP_VAL_ON_INDEX

ORA- 00001

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

INVALID _ CURSOR

ORA-01001

Попытка применить команду FETCH к неоткрытому курсору или попытка закрыть курсор, который не открывался

NO_DATA_FOUND

ORA-01403

Попытка выполнить SELECT INTO, когда SELECT возвращает нулевое количество строк (а также другие причины, описание которых выходит за рамки этой книги)

PROGRAM _ ERROR

ORA-06501

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

STORAGE _ ERROR

ORA-06500

Программе не хватает системной памяти

TIMEOUT_ON_RESOURCE

ORA-00051

Программа слишком долго ожидала доступности некоторого ресурса

TOO_MANY_ROWS

ORA-01422

SELECT INTO в PL/SQL вернул более одной строки

VALUE _ ERROR

ORA-06502

PL/SOL встретил неправильное преобразование или усечение данных, или неправильное ограничение на данные

ZERO _ DIVIDE

ORA-01476

Попытка деления на нуль

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

Теперь вернемся к самому первому примеру этой главы и используем в нем SQLCODE и SQLERRM. Ниже приведен исходный код примера и результаты его запуска (рис.1).

Num_a NUMBER:= 6;

Num_b NUMBER;

Num_b:= 0;

Num_a:= Num_a / Num_b;

Num_b:= 7;

dbms_output.put_line(" Value of Num_b "|| Num_b);

EXCEPTION

WHEN ZERO_DIVIDE THEN

err_num NUMBER:= SQLCODE;

err_msg VARCHAR2(512) := SQLERRM;

dbms_output.put_line("ORA Error Number " || err_num);

dbms_output.put_line("ORA Error message " || err_msg);

dbms_output.put_line("Value of Num_a " || Num_a);

dbms_output.put_line("Value of Num_b " || Num_b);

SQL> set serveroutput on

SQL> DECLARE

2 num_a NUMBER:= 6;

3 num_b NUMBER;

4 BEGIN

5 num_b:= 0;

6 num_a:= num_a / num_b;

7 num_b:= 7;

8 dbms_output.put_line(" Value of num_b "|| num_b);

9 EXCEPTION

10 WHEN ZERO_DIVIDE

11 THEN

13 err_num NUMBER:= SQLCODE;

14 err_msg VARCHAR2(512) := SQLERRM;

15 BEGIN

16 dbms_output.put_line("ORA Error Number "|| err_num);

17 dbms_output.put_line("ORA Error message " || err_msg);

18 dbms_output.put_line("Value of num_a " || num_a);

19 dbms_output.put_line("Value of num_b " || num_b);

20 END;

21 END;

ORA Error Number -1476

ORA Error Message ORA-01476: divisor is equal to zero

Value of num_а 6

Value of num_b 0

PL/SQL procedure successfully completed.

Рис. 1. Использование SQLCODE и SQLERRM при обработке системных исключений

Администраторы баз данных Oracle и программисты порой сталкиваются в своей работе с тем, что БД начинает "ругаться" и зачастую не на совсем понятном языке. В этой статье мы рассмотрим язык ошибок Oracle Errors и предупреждающих сообщений. Все ошибки сгруппированные в крупные разделы и подразделы, чтобы помочь пользователям побыстрее сориентироваться в происходящем и принять меры по исправлению ситуации. В этой статье мы рассмотрим группы первой тысячи ошибок Oracle (по диапазонам кодов от 0 до 999 ), а также объясним причины их появления с предложением действий по их исправлению. Формат ошибки следующий " ORA-xxxxx ". В начале идет префикс "ORA", а затем через тире пятизначный код ошибки.

Группы ошибок Oracle

Сообщения об ошибках ORA-00000 - ORA-00099

Сообщения ORA-00000 - нормальное, успешное завершение, т.е., не ошибка.

Методологические ошибки доступа к ядру 0001-0049

  • ORA-00001: Дублированный ключ в индексе
  • ORA-00017: Превышено максимальное число вызовов
  • ORA-00018: Превышено максимальное количество сеансов
  • ORA-00019: Число сеансов превысило число лицензий
  • ORA-00020: Превышено максимальное число(количество) процессов (num)
  • ORA-00021: Сеанс занят другим процессом. Не переключайте сеанс
  • ORA-00022: Неверный ID сеанса. Доступ запрещен
  • ORA-00023: Сеанс содержит ссылки на частную память. Нельзя отсоеденить сеанс
  • ORA-00024: Соединение более чем с одним процессом запрещено в однопользовательском режиме
  • ORA-00025: Невозможно разместить [значение]
  • ORA-00026: Пропущен или некорректный ID сеанса
  • ORA-00027: Невозможно уничтожить текущий сеанс
  • ORA-00028: Ваша сессия была уничтожена
  • ORA-00029: Сеанс не пользовательский сеанс
  • ORA-00030: Сеанса пользователя с указанным ID не сществует
  • ORA-00031: Сеанс помечен для уничтожения
  • ORA-00032: Неверный пароль перемещения сессии
  • ORA-00033: Текущий сеанс с пустым паролем перемещения
  • ORA-00034: Невозможно выполнить COMMIT или ROLLBACK в текущем PL/SQL сеансе
  • ORA-00035: Значение LICENSE_MAX_USERS не может быть меньше чем текущее количество пользователей
  • ORA-00036: Достигнуто максимальное количество уровней (значение) рекурсии SQL
  • ORA-00037: Невозможно переключится на сеанс другой серверной группы
  • ORA-00038: Невозможно создать сеанс. Серверная группа принадлежит другому пользователю

ENQ ошибки 0050-0080

  • ORA-00050: Ошибка операционной системы при получении очереди
  • ORA-00051: Истекло время ожидания ресурса
  • ORA-00052: Превышено максимальное число возвращаемых ресурсов
  • ORA-00053: превышено максимальное количество очередей
  • ORA-00054: Ресурс занят, при обращении с указателем NOWAIT
  • ORA-00055: Превышено максимальное количество DML блокировок
  • ORA-00056: На заблокированный объект накладывыется DDL блокировка
  • ORA-00057: Превышено максимальное количество временных блокировок таблицы
  • ORA-00058: DB_BLOCK_SIZE должен быть равным с монтируемой БД
  • ORA-00059: Превышено значение параметра DB_FILES
  • ORA-00060: Возникла мертвая блокировка во время ожидания ресурса
  • ORA-00061: Другой экземпляр имеет другие настройки DML_LOCK
  • ORA-00062: DML блокировка всей таблицы ен может быть установлена. Параметр DML_LOCKS нулевой
  • ORA-00063: Превышено значение параметра LOG_FILES
  • ORA-00064: Размещение объекта невозможно, он слишком большой для данной операционной системы
  • ORA-00065: Ошибка инициализации параметра FIXED_DATE
  • ORA-00066: Значение LOG_FILES не совпадают
  • ORA-00067: Некорректное значение для строкового параметра, должна быть строка
  • ORA-00068: Некорректное значение для строкового параметра, должно быть строковым
  • ORA-00069: Нельзя заблокировать таблицу - блокировка запрещена для [значение]
  • ORA-00070: Команда [значение] некорректна
  • ORA-00071: количество процессов должно быть от 1:
  • ORA-00072: Указанный процесс не является активным
  • ORA-00073: Указано неверное количетсво аргументов для команды
  • ORA-00074: Пооцесс не определен
  • ORA-00075: Процесс [значение] не найден в текущем экземпляре
  • ORA-00076: dump [значение] не найден
  • ORA-00077: Указанный dump некорректный
  • ORA-00078: Невозможно определить dump по имени
  • ORA-00079: Переменная [значение] не найдена
  • ORA-00080: Была попытка сделать dump неверной области памяти
  • ORA-00081: Указанный диапазон не является корректным
  • ORA-00082: Диапазон памяти не в указанном диапазоне
  • ORA-00083: Возможно повреждена SGA
  • ORA-00084: Global Area должна быть PGA, SGA или UGA
  • ORA-00085: Текущий вызов не существует
  • ORA-00086: Пользовательский вызов не существует
  • ORA-00087: Команда не может быть выполнена на удаленном экземпляре
  • ORA-00088: Команда не может быть выполнена распеределенным сервером
  • ORA-00089: Неверный номер экземпляра в команде ORADEBUG
  • ORA-00090: Команда ORADEBUG не смогла корректно выделить память в кластерной БД
  • ORA-00091: LARGE_POOL_SIZE должен быть указан
  • ORA-00092: LARGE_POOL_SIZE должен быть больше LARGE_POOL_MIN_ALLOC
  • ORA-00093: %s указан неверно
  • ORA-00094: %s должен содержать значение Integer
  • ORA-00096: Неверное значение [значение] для параметра [значение], должно быть из допустимого диапазона
  • ORA-00097: Особенности Oracle SQL не поддерживаются SQL92:
  • ORA-00099: Истекло время ожидания ресурса. Потенциальная PDML мертвая блокировка

Ошибки областей и сегментов ORA-00100 - ORA-00299

  • ORA-00100: Данных не найдено
  • ORA-00101: Неверная спецификация системного параметра DISPATCHERS
  • ORA-00102: Указанный сетевой протокол не может быть использован диспетчерами
  • ORA-00103: Неверный сетевой протокол, зарезервирован для использования диспетчерами
  • ORA-00104: Обнаружена мертвая блокировка, все доступные сервера блокированы, ожидание ресурса
  • ORA-00105: слишком много конфигураций диспетчера
  • ORA-00106: База данных не может быть простартована или остановлена пока есть соединение с диспетчером
  • ORA-00107: невозможно установить соединение с процессом прослушивателем ORACLE
  • ORA-00108: Невозможна настройка диспетчера для принятия асинхронных соединений
  • ORA-00111: Неверный аттрибут [значение]
  • ORA-00112: Значение аттрибута пусто (null)
  • ORA-00113: Наименование протокола [значение] слишком длинное
  • ORA-00114: Неверное значение для системного параметра SERVICE_NAMES
  • ORA-00115: Соединение сброшено, таблица соединений заполнена
  • ORA-00116: Значение SERVICE_NAMES некорректно
  • ORA-00117: PROTOCOL, ADDRESS или DESCRIPTION должны быть указаны
  • ORA-00118: Только одно значение PROTOCOL, ADDRESS или DESCRIPTION может быть указано
  • ORA-00119: Неверное значение системного параметра
  • ORA-00120: Диспетчер не разрешен или не установлен
  • ORA-00121: SHARED_SERVERS определен без параметра DISPATCHERS
  • ORA-00122: Невозможно проинициализорвать конфигурацию сети
  • ORA-00123: Простой общего сервера
  • ORA-00124: DISPATCHERS указан без MAX_SHARED_SERVERS
  • ORA-00125: Соединение сброшено; неверное представление
  • ORA-00126: Соединение сброшено; противоречие
  • ORA-00127: Диспетчер не существет
  • ORA-00128: Для команды требуется имя диспетчера
  • ORA-00129: Неверный адрес прослушивания
  • ORA-00130: Неверный адрес для прослушивания
  • ORA-00131: Сетевой протокол не поддерживает указанную регистрацию
  • ORA-00132: Синтаксическая ошибка или недопустимое сетевое имя
  • ORA-00150: Дублирующийся идентификатор транзакции
  • ORA-00151: Дублирующийся идентификатор транзакции
  • ORA-00152: Текущая сессия не соотвествует запрошенной
  • ORA-00153: Ошибка в библиотеке XA
  • ORA-00154: Ошибка протокола в мониторе транзакций
  • ORA-00155: Не могу выполнить задание за пределами глобальной транзакции
  • ORA-00160: Имя глобальной транзакции превышает масксимальную длину
  • ORA-00161: Длина транзакции некорректна
  • ORA-00162: Внешний идентификатор базы данных превышает маскимальное значение
  • ORA-00163: Внешнее имя базы данных превышает максимальное значение
  • ORA-00164: Распределенные автономные транзакции не разрешены поверх переносимых распределенных транзакций
  • ORA-00165: Автономные переносимые распределенные транзакции с удаленными операциями не разрешены
  • ORA-00200: Управляющий файл не может быть создан
  • ORA-00201: Версия управляющенго файла [значение] несовместима с версией ORACLE [значение]
  • ORA-00202: Управляющий файл: [значение]
  • ORA-00203: Использование неверного управляющего файла
  • ORA-00204: Ошибка чтения блока данных (блок [значение], блоков [значение]) в управляющем файле
  • ORA-00205: Ошибка идентификации управляющего файла. Смотрите лог для дополнительной информации
  • ORA-00206: Ошибка записи в управляющий файл (блок [значение], блоков [значение])
  • ORA-00207: Управляющий файл не от этой базы данных
  • ORA-00208: Количество управляющих файлов превышает допустимое значение [значение]
  • ORA-00209: Блок данных управляющего файла не совпадает. Смотрите лог для получения дополнительной информации
  • ORA-00210: Невозможно открыть указанный управляющий файл
  • ORA-00211: Управляющий файл не совпадает с предыдущим
  • ORA-00212: Размер блока [значение] меньше минимально требуемого [значение]
  • ORA-00213: Невозможно повторно использовать управляющий файл, размер файла %1: требуется %2:
  • ORA-00214: Версия управляющего файла несовместима с версией файла
  • ORA-00215: Должен быть минимум один управляющий файл
  • ORA-00216: Размер управляющего файла не может быть изменен для переноса с 8.0.2:
  • ORA-00217: Размер управляющего файла не может быть изменен для переноса с 9.0.1:
  • ORA-00218: Размер блока данных управляющих файлов не совпадает с размером указанным в параметре DB_BLOCK_SIZE
  • ORA-00219: Размер управляющего файла превышает установленный размер
  • ORA-00220: Управляющий файл не может быть подключен, смотрите alert-log для более детальной информации
  • ORA-00221: Ошибка записи в управляющий файл
  • ORA-00222: Операция пытается использовать имя уже примонтированного управляющего файла
  • ORA-00223: Конвертируемый файл неверный или имеет неверную версию
  • ORA-00224: Неудачное изменение размера управляющего файла с неверным типом записи
  • ORA-00225: Ожидаемый размер управляющего файла [значение] отличается от актуального [значение]
  • ORA-00226: Операция невозможна пока альтернативный управляющий файл открыт
  • ORA-00227: В управляющем файле найден поврежденный блок данных (блок [значение] блоков [значение]).
  • ORA-00228: Длина имени альтернативного контрольного файла превышает допустимое значение [значение]
  • ORA-00229: Операция запрещена. Файл-снимок (snapshot) уже помещен в очередь и занят процессом
  • ORA-00230: Операция запрещена. Очередь снимоков контрольного файла недоступна
  • ORA-00231: Снимок управляющего файла не назван
  • ORA-00232: Снимок управляющего файла не существует, поврежден или нечитаемый
  • ORA-00233: Копия управляющего файла повреждена или нечитаема
  • ORA-00234: Ошибка идентификации или открытия снимка или копирования управляющего файла
  • ORA-00235: Управляющий файл заблокирован для паралельного изменения
  • ORA-00236: Снимок отменен, выбран резервный управляющий файл
  • ORA-00237: Операция создания снимка запрещена. Создан новый управляющий файл
  • ORA-00238: Операция пытается использовать имя файла как и имя базы данных
  • ORA-00250: Архиватор не запущен
  • ORA-00251: LOG_ARCHIVE_DUPLEX_DEST не может быть той же самой директорией что и %1:
  • ORA-00252: Журнал пуст. Архивирование невозможно
  • ORA-00253: Длина указанной строки превышает предел
  • ORA-00254: Ошибка в управляющей строке архива
  • ORA-00255: Ошибка во время архивации log-файла
  • ORA-00256: Произошла ошибка при разборе архивной строки
  • ORA-00257: Ошибка архиватора. Не могу подсоеденится пока занят ресурс
  • ORA-00258: При ручном архивировании в режиме NOARCHIVELOG log должен быть указн
  • ORA-00259: Журнал открытого экземпляра является текущим журнало и не может быть заархивирован
  • ORA-00260: Не могу найти активный журнал очереди [значение] для потока [значение]
  • ORA-00261: Журнал был изменен или архивирован
  • ORA-00262: Текущий журнал [значение] занят другим потоком [значение], невозможно переклюится
  • ORA-00263: Нет журналов для архивирования для потока [значение]
  • ORA-00264: Восстаовления не требуется
  • ORA-00265: Требуется восстановление экземпляра, новозможно утсановить режим ARCHIVELOG
  • ORA-00266: Требуется имя архивного журнала
  • ORA-00267: Имя архивного журнала не требуется
  • ORA-00268: Указанный журнальный файл не существует
  • ORA-00269: Указанный журнальный файл - часть потока [значение] не [значение]
  • ORA-00270: Ошибка создания архивного журнала [значение]
  • ORA-00271: Нет журналов требующих архивации
  • ORA-00272: Ошибка записи в архивный журнал [значение]
  • ORA-00273: Восстановление данных загруженных напрямую без журнализации
  • ORA-00274: Указано неверное значение [значение] параметра восстановления
  • ORA-00275: Процедура восстановления уже запущена
  • ORA-00276: Ключевое слово CHANGE указано, но не указан номер изменения
  • ORA-00277: Недопустимая опция восстановления UNTIL флаг [значение]
  • ORA-00278: Журнальный файл [значение] больше не требуется для восстановления
  • ORA-00279: Требуется имя журнального файла
  • ORA-00280: Требуется имя потока и последовательности
  • ORA-00281: Восстановление не может быть выполнено с использованием диспетчера
  • ORA-00282: UPI вызов не поддерживается, используйте ALTER DATABASE RECOVER
  • ORA-00283: Сеанс восстановления отменен из за ошибок
  • ORA-00284: Сеанс восстановления в процессе
  • ORA-00285: Значение TIME задано неверно
  • ORA-00286: Нет доступных файлов или файлов с корректными данными
  • ORA-00287: Указанный номер изменения [значение] не найден в потоке [значение]
  • ORA-00288: Для продолжения восстановления используйте ALTER DATABASE RECOVER CONTINUE
  • ORA-00289: Переменная [значение]
  • ORA-00290: Ошибка операционной системы. См сообщение об ошибке ниже
  • ORA-00291: Для PARALLEL требуется числовое значение
  • ORA-00292: Компонет "паралельное восстановление" не установлен
  • ORA-00293: Управляющий файл не синхронизирован с журналом повторного выполнения
  • ORA-00294: Указан неверный формат для архивного журнала [значение]
  • ORA-00295: Неверный номер файла данных/временных данных [значение], должно быть от 1: до [значение]
  • ORA-00296: Превышено значение RECOVER DATAFILE LIST
  • ORA-00297: Требуется указать RECOVER DATAFILE LIST перед RECOVER DATAFILE START
  • ORA-00298: Пропущенное или неверное значение аттрибута
  • ORA-00299: Восстановление на файловом уровне файла данных %1

Ошибки I/O-управления базой данных ORA-00300 - ORA-00399

Ошибки управления входом в БД Оракл и выходом из неё:

  • ORA-00300: Недопустимый размер блока журнала повторного выполнения, указанный размер [значение] превышает предел размер [значение]
  • ORA-00301: Ошибка в добавлении файла протокола [значение] - файл не может быть создан
  • ORA-00302: Превышен лимит количества журнальных файлов
  • ORA-00303: невозможно выполнить Parallel Redo
  • ORA-00304: Запрашиваемый INSTANCE_NUMBER занят
  • ORA-00305: Журнал [значение] потока [значение] не согласован и принадлежит другой базе данных
  • ORA-00306: Достигнут предел количества экземпляров [значение]
  • ORA-00307: Запрошенный INSTANCE_NUMBER выходит за допустимые пределы, максимум [значение]
  • ORA-00308: Невозможно открыть архивный журнал [значение]
  • ORA-00309: Журнал принадлежит другой базе данных
  • ORA-00310: Архивный журнал содержит последовательность [значение]; требуется последовательность [значение]
  • ORA-00311: Невозможно прочитать заголовок архивного журнала
  • ORA-00312: Доступный журнал [значение] поток [значение]
  • ORA-00313: Ошибка при открытии файла журнальной группы [значение] поток [значение]
  • ORA-00314: Журнал [значение], ожидаемая последовательность [значение] не совпадает с [значение]
  • ORA-00315: Журнал [значение] поток [значение], неверное значение [значение] в заголовке
  • ORA-00316: Журнал [значение], значение [значение] в заголовке указывает что это не журнальный файл
  • ORA-00317: Указанный файл [значение] не является журнальным файлом
  • ORA-00318: Журнал [значение] превысил допустимый размер [значение] не совпадает с [значение]
  • ORA-00319: Журнал [значение] имеет некорректный статус сброса
  • ORA-00320: Невозможно прочитать заголовок файла [значение] потока [значение]
  • ORA-00321: Невозможно обновить данные в заголовке журнального файла [значение] поток [значение]
  • ORA-00322: Журнал [значение] потока [значение] не текуща копия
  • ORA-00323: Текущий журнал потока [значение] не пригоден к использованию и все другие требуют архивации
  • ORA-00324: Имя журнального файла [значение] переведенное [значение] слишком длинное, превышен допустимый предел [значение]
  • ORA-00325: Архивный журнал потока [значение] содержит неверное значение [значение] в заголовке
  • ORA-00326: Журнал начинается на [значение], требуется ранее измененное [значение]
  • ORA-00327: Журнал [значение] потока [значение] имеет физический размер [значение] меньшее чем требуется [значение]
  • ORA-00328: Архивный журнал заканчивается на [значение], требуется более позднее изменение [значение]
  • ORA-00329: Архивный журнал начинается на [значение], требуется изменение [значение]
  • ORA-00330: Архивный журнал заканчивается на [значение], требуется изменение [значение]
  • ORA-00331: Версия журнала [значение] не совместима с версией ORACLE [значение]
  • ORA-00332: Архивный журнал очень маленький, возможно неполностью заархивирован
  • ORA-00333: Журнал повторного выполения прочитал [значение] ошибочных блоков из доступных [значение]
  • ORA-00334: Архивный журнал [значение]
  • ORA-00335: Доступный журнал [значение]: Нет журнала с таким номером, журнал не существует
  • ORA-00336: Размер блока файла журнала меньше чем минимальный блок [значение]
  • ORA-00337: Журнальный файл [значение] не существует и размер не указан
  • ORA-00338: Журнал [значение] больше чем последнее значение управляющего файла
  • ORA-00339: Архивный журнал не содержит каких либо повторных исполнений
  • ORA-00340: I/O ошибка при обработке журнала [значение] потока [значение]
  • ORA-00341: Журнальный файл [значение] имеет неверный номер [значение] в заголовке
  • ORA-00342: Архивный журнал не содержит информации SCN [значение]
  • ORA-00343: Слишком много ошибок, журнал закрыт
  • ORA-00344: Невозможно пересздать доступный журнал [значение]
  • ORA-00345: Ошибка записи в журнал повторного исполнения, блок [значение] всего [значение]
  • ORA-00346: Журнал отмечен как устаревший (STALE)
  • ORA-00347: Журнал [значение] потока [значение] имеет размер блока [значение], не совпадает, должно быть [значение]
  • ORA-00348: Неудачная обработка повторного восстановления, экземпляр должен быть остановлен
  • ORA-00349: Отказ в получении размера блока для [значение]
  • ORA-00350: Журнал [значение] (поток [значение])экземпляра [значение] требует архивирования
  • ORA-00351: Неправильное время для восстановления
  • ORA-00352: Все журналы из потока [значение] должны быть архивированы - нельзя разрешить
  • ORA-00353: Поврежден журнал блок [значение] изменение [значение] время [значение]
  • ORA-00354: Поврежден заголовок блока журнала повторного выполнения
  • ORA-00355: Номер изменения за пределами последовательности
  • ORA-00356: Неверная длина описания изменения
  • ORA-00357: Слишком много членов указано для журнального файла, максимум [значение]
  • ORA-00358: Слишком много членов указано, максимум [значение]
  • ORA-00359: Группа журнальных файлов [значение] не существует
  • ORA-00360: Не член журнального файла: [значение]
  • ORA-00361: Невозможно удалить последний журнал [значение] из группы [значение]
  • ORA-00362: Требуемый член является верным журнальным файлом в группе [значение]
  • ORA-00363: Журнал не архивированный
  • ORA-00364: Невозможно писать в заголовок нового журнала
  • ORA-00365: Указанный журнал не корректный
  • ORA-00366: Журнал [значение] потока [значение], ошибка контрольной суммы в заголовке файла
  • ORA-00367: Ошибка контрольной суммы в заголовке файла
  • ORA-00368: Ошибка контрольной суммы в блоке журнала повторного выполнения
  • ORA-00369: Текущий журнал потока [значение] испорчен и другой журнал очищен
  • ORA-00371: Недостаточно памяти в разделяемом пуле, должно быть не меньше [значение]
  • ORA-00372: Файл [значение] не может быть изменен в настоящее время
  • ORA-00373: Версия открытого журнала [значение] несовместима с версией ORACLE [значение]
  • ORA-00374: Значение параметра db_block_size=[значение] некорректно; должен быть составной в диапазоне [значение..значение]
  • ORA-00375: Невозможно получить значение по-умолчанию db_block_size
  • ORA-00376: Файл [значение] не может быть прочитан в настоящее время
  • ORA-00377: Частое резервное копирование файла [значение] причина тупика в операциях записи
  • ORA-00378: Буферный кэш не может быть создан как указано
  • ORA-00379: Нет свободных буферов в буферном кэше [значение] для блока [значение]K
  • ORA-00380: Не могу указать db_[значение]k_cache_size [значение]K это стандартный размер блока.
  • ORA-00381: Невозможно использовать старый и новый параметры для указания размера буферного кэша
  • ORA-00382: %s неверный размер блока, верное значение [значение..значение]
  • ORA-00383: Значение по умолчанию для кэша не может быть уменьшено до нуля
  • ORA-00384: Недостаточно памяти для увеличения кэша
  • ORA-00390: Журнал [значение] потока [значение] очищен и не может быть текущим журналом
  • ORA-00391: Все потоки с этого момента должны переключится на новый формат журнала
  • ORA-00392: Журнал [значение] потока [значение] был очищен, операция не разрешена
  • ORA-00393: Журнал [значение] потока [значение] необходим для восстановления недоступной (offline) базы данных.
  • ORA-00394: Доступный журнал заново используется во время его архивирования
  • ORA-00395: Журнал для клона базы данных должен быть переименован
  • ORA-00396: Ошибка [значение] требует отката на однопроходное восстановление
  • ORA-00397: Восстановление экземпляра прервано с ошибкой
  • ORA-00398: Восстановление прервано до правильной переконфигурации
  • ORA-00399: Поврежденное описание изменений в журнале повторного исполнения

Ошибки инициализации базы данных ORA-00400 - ORA-00499

  • ORA-00400: Неверное значение [значение] для параметра [значение]
  • ORA-00401: Значение для параметра [значение] не поддерживается этой версией
  • ORA-00402: Изменения базы данных версии [значение] не могут быть использованы версией [значение]
  • ORA-00403: [значение] не тоже самое как в других экземплярах [значение]
  • ORA-00404: Преобразованный файл не найден: [значение]
  • ORA-00405: Тип совместимости [значение]
  • ORA-00406: Параметр COMPATIBLE требует значение [значение] или выше
  • ORA-00407: Откат обновления с версии [значение].[значение] до версии [значение].[значение] неразрешено
  • ORA-00408: Значение параметра [значение] выставлено в TRUE
  • ORA-00436: Oracle не лицензирован. Обратитесь в корпорацию Oracle для помощи
  • ORA-00437: Дополнительные возможности Oracle не лицнзированны. Обратитесь в корпорацию Oracle для помощи
  • ORA-00438: Опция [значение] не установлена
  • ORA-00439: Дополнительная возможность не разрешена: [значение]
  • ORA-00443: Фоновый процесс [значение] не запущен
  • ORA-00444: Фоновый процесс [значение] вышел из строя при запуске
  • ORA-00445: Фоновый процесс [значение] не стартовал по истечение [значение] секунд
  • ORA-00446: Фоновый процесс стартовал, когда этого не ожидали
  • ORA-00447: Критическая ошибка в фоновом процессе
  • ORA-00448: Нормальное завершение фонового процесса
  • ORA-00449: Фоновый процесс [значение] внезапно прервал работу с ошибкой [значение]
  • ORA-00470: LGWR процесс завершился с ошибкой
  • ORA-00471: DBWR процесс завершился с ошибкой
  • ORA-00472: PMON процесс завершился с ошибкой
  • ORA-00473: ARCH процесс завершился с ошибкой
  • ORA-00474: SMON процесс завершился с ошибкой
  • ORA-00475: TRWR процесс завершился с ошибкой
  • ORA-00476: RECO процесс завершился с ошибкой
  • ORA-00477: SNP* процесс завершился с ошибкой
  • ORA-00478: SMON процесс завершился с ошибкой [значение]
  • ORA-00480: LCK* процесс завершился с ошибкой
  • ORA-00481: LMON процесс завершился с ошибкой
  • ORA-00482: LMD* процесс завершился с ошибкой
  • ORA-00483: Во время остановки процесс завершился ненормально
  • ORA-00484: LMS* процесс завершился с ошибкой
  • ORA-00485: DIAG процесс завершился с ошибкой [значение]

Сообщения об ошибках ORA-00500 - ORA-00599

  • ORA-00568: Максимальное количество прерываний обработчика превышено

Ошибки аварийного восстановления ORA-00600 - ORA-00699

  • ORA-00600: Код внутренней ошибки, аргументы [значение], [значение], [значение], [значение], [значение], [значение], [значение], [значение]
  • ORA-00601: Конфликт чистых блокировок
  • ORA-00602: Внутренее программное исключение
  • ORA-00603: Сеанс сервера Oracle был прерван критичной ошибкой
  • ORA-00604: Ошибка случилась на рекурсивном уровне SQL [значение]
  • ORA-00606: Внутренний код ошибки
  • ORA-00607: Внутреняя ошибка при изменении блока данных

Словарные ошибки ORA-00700 - ORA-00799

  • ORA-00701: Объект необходимый для старта базы данных не может быть изменен
  • ORA-00702: Загрузчик версии [значение] несовместим с версией [значение]
  • ORA-00703: Максимальное количество блокировок кэша строк экземпляра превышено
  • ORA-00704: Процесс загрузки завершился аварийно
  • ORA-00705: Неверное состояние во время запуска; остановите экземпляр и заново запустите
  • ORA-00706: Ошибка смены формата файла [значение]

Общие ошибки ORACLE ORA-00800 - ORA-00899

  • ORA-0800: buffer write process is not active (процесс записи в буфер не активен).
    Причина : Проблема связана с попыткой запуска ORACLE, что вызвало снятие процесса записи в буфер. Обычно это сообщение выдается вместе с сообщением о системной ошибке, обьясняющей причину сбоя.
    Действие : Используйте сообщение о системной ошибке (если такое есть) для выяснения причины ошибки. Если системная ошибка отсутствует, обратитесь к руководству по инстолляции ORACLE за перечнем требо- ваний. Убедитесь, что все логические имена ORACLE присвоены верно, что достаточно свободного дискового пространства в директории ORACLE, и что достаточное число глобальных секций и страниц. Также убедитесь в наличии у бюджета ORACLE трубуемого приоритета. Если источник проблемы не определен, обратитесь к соответ- ствущему установочному обеспечению.
  • ORA-0801: after image write process is not active (процесс записи последущего вида не активен).
    Причина : Это свойство не поддерживается.
    Действие : Обратитесь к соответствующему установочному обеспечению.
  • ORA-0802: invalid context area (недопустимая контекстная область).
    Причина
    Действие
  • ORA-0805: opiodr: inconsistent recursion level number (несовместимый уровень рекурсии).
    Причина :Это сообщение о внутренней ошибке, которая не может произойти при нормальной работе.
    Действие : Обратитесь к соответствуюшему наладочному обеспечению с подробным описанием проблемы.
  • ORA-0806: before image process is not active (процедура предварительного вида не активна).
    Причина
    Действие
  • ORA-0807: clean up process is not active (процедура очистки не активна).
    Причина : Проблема связана с попыткой запуска ORACLE, что вызвало снятие процесса предварительного вида.Обычно это сообщение выдается вместе с сообще- нием о системной ошибке, обьясняющей причину сбоя.
    Действие : Используйте сообщение о системной ошибке (если такое есть) для выяснения причины ошибки. Если системная ошибка отсутствует, обратитесь к руководству по инстолляции ORACLE для вашей опера- ционной системы,чтобы проверить правильность инстол- ляции. Если источник проблемы не определен, обрати- тесь к соответствущему установочному обеспечению.
  • ORA-0809: opispf: invalid special function code (неверный спецкод функции).
    Причина :Это сообщение о внутренней ошибке, которая не может произойти при нормальной работе.
    Действие : Обратитесь к соответствуюшему наладочному обеспечению с подробным описанием проблемы.
  • ORA-0810: opiomc: context area not remapped at original addres (контекстная область не соответствует начальному адресу).
    Причина :Это сообщение о внутренней ошибке, которая не может произойти при нормальной работе.
    Действие : Обратитесь к соответствуюшему наладочному обеспечению с подробным описанием проблемы.
  • ORA-0811: readahead process is not active (процедура чтения вперед не активна).
    Причина : Проблема связана с попыткой запуска ORACLE, что вызвало снятие процесса чтения вперед. Обычно это сообщение выдается вместе с сообщением о системной ошибке, обьясняющей причину сбоя.
    Действие : Используйте сообщение о системной ошибке (если такое есть) для выяснения причины ошибки. Если системная ошибка отсутствует, обратитесь к руководству по инстолляции ORACLE для вашей опера- ционной системы,чтобы проверить правильность инстол- ляции. Если источник проблемы не определен, обрати- тесь к соответствущему установочному обеспечению.
  • ORA-0813: assertion failure (добавление снято).
    Причина :Это сообщение о внутренней ошибке, относящейся к ORACLE SORT. Это не может произойти при нормальной работе.
    Действие : Обратитесь к соответствуюшему наладочному обеспечению с подробным описанием проблемы.
  • ORA-0814: ltbdrv: illegal lock mode (недопустимый режим защиты).
    Причина :Это сообщение о внутренней ошибке, которая не может произойти при нормальной работе.
    Действие : Обратитесь к соответствуюшему наладочному обеспечению с подробным описанием проблемы.
  • ORA-00816: error message translation failed (не достает перевода сообщения об ошибке / сбой трансляции сообщения об ошибке).
    Причина :Это сообщение о внутренней ошибке, которая не может произойти при нормальной работе.
    Действие : Обратитесь к соответствуюшему наладочному обеспечению с подробным описанием проблемы.
  • ORA-0817: prsgkw: internal error token not found (индентификатор внутренней ошибки не обнаружен).
    Причина :Это сообщение о внутренней ошибке, которая не может произойти при нормальной работе.
    Действие : Обратитесь к соответствуюшему наладочному обеспечению с подробным описанием проблемы.
  • ORA-0818: opispf: osf too big (osf слишком велик).
    Причина :Это сообщение о внутренней ошибке, которая не может произойти при нормальной работе.
    Действие : Обратитесь к соответствуюшему наладочному обеспечению с подробным описанием проблемы.

Синтаксические ошибки ORA-00900 - ORA-00999

  • ORA-00900: Неверное SQL предложение.
    Причина : Введенный вами оператор не опознан как допустимая команда SQL.
    Действие : Проверьте опечатки,убедитесь, что ключевые слова команд SQL начинаются одним из следущих слов: ALTER, AUDIT, CREATE, DELETE, DROP, GRANT, INSERT, NOAUDIT, RENAME, REVOKE, SELECT, UPDATE, LOCK, VALIDATE. Другие команды вызовут эту ошибку.
  • ORA-00901: Неверный синтаксис команды CREATE / Неверная команда на создание.
    Причина : В команде CREATE использована недопустимая опция CREATE.
    Действие : Проверьте опечатки, убедитесь,что за командой CREATE следует одна из следущих опций: INDEX, PARTITION, SPACE DEFINITION, SYNONYM, TABLE или VIEW.
  • ORA-00902: Неверный тип данных.
    Причина : Введенный тип данных в операторе CREATE или ALTER TABLE не является допустимым.
    Действие : Проверьте опечатки, убедитесь, что за каждым именем колонки следует один из следущих типов данных: DATA, CHAR, NUMBER, RAW, LONG или LONG RAW.
  • ORA-00903: Неверное имя таблицы.
    Причина : Введенные имена таблицы или группы не существуют или недопустимые. Это сообщение так же появляется в сучае, если неверное или несуществующее имя группы описано в команде ALTER/DROP CLUSTER.
    Действие : Проверьте опечатки. Допустимое имя группы должно начинаться с буквы и содержать только буквы,цифры и спецсимволы: $,# и _. Имя должно быть не длиннее 30 символов и не являться зарезервированным словом.
  • ORA-00904: Неверное имя колонки.
    Причина : Введенное имя колонки отсутствует или недопустимо.
    Действие : Введите верное имя колонки. Допустимое имя должно начинаться с буквы и содержать только буквы,цифры и спецсимволы: $,# и _. Имя должно быть не длиннее 30: символов и не являться зарезервированным словом. Если оно содержит другие символы, оно долно быть в двойных кавычках.
  • ORA-00905: Пропущено ключевое слово.
    Причина : Требуемое ключевое слово пропущено.
    Действие : Проверьте синтаксис команды и добавьте пропущенные ключевые слова.
  • ORA-00906: Пропущена левая скобка.
    Причина : Требуемая левая скобка пропущена. Основные команды (такие как CREATE TABLE,CREATE CLUSTER и INSERT) требуют список пунктов, заключенный в скобки. Скобки также необходимы вокруг последовательностей в предложении WHERE и в UPDATE таблица SET колонка = (SELECT ...).
    Действие : Проверьте синтаксис команды и вставь- те пропущенные скобки.
  • ORA-00907: missing right parenthesis пропущена правая скобка
    Причина : Левая скобка введена бз закрывающей правой или предыдущая информация была заключена в скобки. Все скобки должны быть парными.
    Действие : Вставьте закрывающую правую скобку.
  • ORA-00908: missing NULL keyword пропущено ключевое слово NULL
    Причина : В командах СREATE или ALTER TABLE, NOT было введенодля указания, что никакие нулевые величи- ны не допустимы в этой колонке,но ключевое слово NULL было пропущено.
    Действие : Если требуете наличие значения в этой колонке, замените ключевое слово NOT на NOT NULL.
  • ORA-00909: invalid number of arguments недопустимое число аргументов
    Причина : Указание на встроенную функцию ORACLE было сделано с неверным числом аргументов.Все фун- кции ORACLE, за исключением SYSDATE требуют по крайней мере один аргумент.
    Действие : Проверьте синтаксис команды и введите введите необходимое число аргументов.
  • ORA-00910: specified length too large for CHAR colum указанная длина слишком велика для колонки CHAR
    Причина : Размер поля знака не указан или указан неверно. Необходимо указывать максимальную длину для каждой колонки знаков.Это длина может принимать значения от 0: до 240: .
    Действие : Введите максимальную длину из диапазона от 0 до 240: .
  • ORA-00911: invalid character неверный знак
    Причина : Спецзнак неверен или допустим только в определенных местах. Если спецзнак(кроме $, # и _) используется в имени и имя не заключено в двойные кавычки ("), появится данное сообщение.
    Действие : Удалите неверный знак из команды.
  • ORA-00912: operand pop оperation with no operands on stack для операции с операндом рор отсутствуют операнды в стеке
    Причина : Это сообщение о внутренней ошибке, которая не может произойти при нормальной работе.
    Действие : Обратитесь к соответствуюшему наладочному обеспечению с подробным описанием проблемы.
  • ORA-00913: too many values слишком много значений
    Причина : Команда предполагает два одинаковых набора значений, но во втором наборе пунктов больше, чем в первом. Например: подзапрос в предложении WHERE или HAVING может быть слишком много колонок, или в предложениях VALUES или SELECT колонок больше, чем в INSERT.
    Действие : Проверьте число пунктов и измените их.
  • ORA-00914: missing ADD keyword пропущено ключевое слово ADD
    Причина : Команда ALTER PARTITION введна без ключевого слова ADD.
    Действие : проверьте синтаксис команды и повторите ее.
  • ORA-00915: network access of dictionary table not currently allowed неверно установлен сетевой доступ к словарной таблице
    Причина :Это сообщение о внутренней ошибке, которая не может произойти при нормальной работе.
    Действие : Обратитесь к соответствуюшему наладочному обеспечению с подробным описанием проблемы.
  • ORA-00917: missing comma пропущена запятая
    Причина : Пропущена запятая в списке колонок,или в списке значений в операторе INSERT, или в списке формы ((c,d),(e < f),...).
    Действие : Проверьте сиснтаксис в вашем SQL оператор и, если необходимо, добавьте пропущенную запятую.
  • ORA-00918: column ambigiuously defined неоднозначное определение колонки
    Причина : Колонка, использованая для присоединения существует в более, чем одной таблице. При присоеди- нении любая колонка, присутствующая более чем в одной таблице, должна содержать имя таблицы. Имя колонки должно указываться следущим образом: TABLE.COLUM или TABLE_ALIAS.COLUMN, EMP.DEPTNO или E.DEPTNO, а не просто EMP.
    Действие : Введите имя таблицы в имя колонки перед точкой или альтернативное имя таблицы, как показано выше.
  • ORA-00919: invalid functio неверная функция
    Причина : Ввод, похожий на функцию, типа функция(аргумент), не опознан как функция ORACLE.
    Действие : Обратитесь к руководству за списком допустимых имен функций.
  • ORA-00920: invalid relational operator неверный оператор отношения
    Причина : Задача поиска с неверным или пропущенным оператором условия.
    Действие : Введите допустимый условный оператор. Допустимы следущие орераторы отношения:=, !=, <>, >, >=, <, <=,IN, IS, NULL, LIKE, и BETWEEN.
  • ORA-00921: unexpected end of SQL command неожиданный конец команды SQL
    Причина : Команда SQL не полная. Была введена часть верной команды, но по крайней мере одина главная ком- понента пропущена.
    Действие : Проверьте синтаксис команды и вставьте пропущенные компоненты.
  • ORA-00922: invalid optio неверная опция
    Причина : Неверная опция была описана в определении колонки или в определении области.
    Действие : Удалите неверную опцию из определения колонки или области. Допустимой опцией, описывающей колонку, является NOT NULL для указания, что колонка не может содержать NULL значения. Все прочее,следущее за типом данных, кроме запятой или закрывающей скобки, классифицируется как недопустимая опция. Описывая длину для DATA или тип данных LONG, вы получите данное сообщение об ошибке. В описании определения области допустимы только следущие опции: INITIAL, INCREMENT и MAXEXTENTS,(для DATAPAGES и INDEXPAGES) и PCTFREE (только для DATAPAGES).
  • ORA-00923: missing FROM keyword пропущено ключевое слово FROM
    Причина : В командах SELECT или REVOKE ключевое слово FROM или пропущено, или неверно помещено, или с опе- чаткой. Ключевое слово FROM должно следовать в команде SELECT за выбранным пунктом, или за быбранным именем таблицы в команде REVOKE.
    Действие : Вставьте на место слово FFROM. Выбранный список может быть сам по себе ошибочным. Убедитесь, что использованы одинарные кавычки для выделения альтернативного имени, и является или нет альтерна- тивное имя зарезервированным словом.
  • ORA-00924: missing BY keyword пропущено ключевое слово BY
    Причина : Пропущено ключевое слово BY в выражениях GROUP BY, ORDER BY, или CONNECTED BY. Кроме того в команде GRANT за словом INDENTIFIED должно следовать BY.
    Действие : Правильно вставьте слово BY.
  • ORA-00925: missing INTO keyword пропущено ключевое слово INTO
    Причина : Была употреблена команда INSERT без ключе- чевого слова INTO.
    Действие : Замените INSERT на INSERT INTO.
  • ORA-00926: missing VALUES keyword пропущено ключевое слово VALUES
    Причина : Оператор INSERT без ключевого слова VALUES или SELECT. За выражением INSERT INTO должно следовать выражение VALUES или SELECT последователь- ность.
    Действие : Введите после выражения INSERT INTO выражение VALUES или последовательность.
  • ORA-00927: missing equal sig пропущен знак равно
    Причина : Знак равно пропущен в одном из следущих мест: * в выражении SET команды UPDATE * после! для указания на неравенство * в выражении PCTFREE команды CREATE INDEX
    Действие : Вставьте знак равенства.
  • ORA-00928: missing SELECT keyword пропущено ключевое слово SELECT
    Причина : В команду CREATE VIEW должна быть включена SELECT последовательность.
    Действие : Вставьте требуемое выражение SELECT в команду CREATE VIEW.
  • ORA-00929: missing period пропущен период
    Причина :Это сообщение о внутренней ошибке, которая не может произойти при нормальной работе.
    Действие : Обратитесь к соответствуюшему наладочному обеспечению с подробным описанием проблемы.
  • ORA-00930: missing asterisk пропущена звездочка *
    Причина :Это сообщение о внутренней ошибке, которая не может произойти при нормальной работе.
    Действие : Обратитесь к соответствуюшему наладочному обеспечению с подробным описанием проблемы.
  • ORA-00931: missing identifier порущен индентификатор
    Причина :Это сообщение о внутренней ошибке, которая не может произойти при нормальной работе.
    Действие : Обратитесь к соответствуюшему наладочному обеспечению с подробным описанием проблемы.
  • ORA-00932: inconsistent datatypes несовместимый тип данных
    Причина : Попытка добавить символьное поле к полю данных. Данные могут быть добавлены только к числовым полям.
    Действие : Преобразуйте символьное поле в числовое поле с помощью функции TO_NUMBER перед добавлением поля данных.
  • ORA-00933: SQL comand not properly ended команда SQL не закончена
    Причина : SQL-команда закончена неверным выражением. Например: выражение ORDER BY может быть включено в команду CREATE VIEW или INSERT.Однако ORDER BY не должна использоваться для создания очередного обзора или включаться в основной порядок.
    Действие : Проверьте синтаксис команды и удалите лишние компоненты. Вы должны уметь дублировать удален- ные выражения другими командами. Например, если вы желаете упорядочить строки обзора, действуйте так же, как при запросе на обзор, но не как при создании его. Эта ошибка также может произойти при применении SQL*Forms, если смещено продолжение строки. Проверьте смещения и удалите пробелы. Вы должны испоьзовать соответствующие окончания SQL, если используете I выражение с одним аргументом, например: IN(X). В вы- ражении IN должно испоьзоваться не менее двух аргу- ментов.
  • ORA-00934: set function not allowed here данная функция недопустима здесь
    Причина : одна из групповых функций (таких как AVG, SUM, MAX, MIN, COUNT) была использована в вы- жении WHERE или GROUP BY.
    Действие : Удалите групповую функцию из выражений WHERE или GROUP BY.Вы можете получить желаемый резу- льтат,включив функцию в запрос или предложение HAVING.
  • ORA-00935: set function is nested too deep данная функция является слишком вложеной
    Причина :Это сообщение о внутренней ошибке, которая не может произойти при нормальной работе.
    Действие : Обратитесь к соответствуюшему наладочному обеспечению с подробным описанием проблемы.
  • ORA-00936: missing expressio пропущено выражение
    Причина : Необходимая часть выражения пропущена. Например, команда SELECT вводится без списка колонок, или с несовместимым выражением типа (SAL+). Это может произойти и в том случае, если пропущены зарезервиро- ванные слова типа SELECT TABLE.
    Действие : Проверьте синтаксис команды и введите пропущенные команды.
  • ORA-00937: not a single group set functio устанавливается не только групповая функция
    Причина : В запрос нельзя одновременно включать и групповую функцию (AVG, SUM,COUNT,MIN или MAX) и собственное выражение для колонки, пока выражение для колонки не включено в выражение GROUP BY.
    Действие : Удалите из запроса или выражение для колонки, или групповую функцию, или добавьте выражение GROUP BY , в которое включите перечисление колонок.
  • ORA-00938: not enough arguments for functio недостаточно аргуметов для функции
    Причина : В функции описано слишком мало аргументов.
    Действие : Проверьте синтаксис функции и добавьте все необходимые аргументы.
  • ORA-00939: too many arguments for functio cлишком много аргументов в функции
    Причина : В функции описано слишком много аргументов.
    Действие : Проверьте синтаксис функции и опишите только необходимые аргументы.
  • ORA-00940: invalid ARTER comand неверная команда ALTER
    Причина : Описана неверная опция ALTER. Только разделы и таблицы могут быть неповторяющимися. Пра- вильная команда ALTER должна начинаться одним из сле- дущих вариантов: ALTER TABLE или ALTER PARTITION.
    Действие : Проверьте синтаксис рпавильного написания команды ALTER.
  • ORA-00941: missing cluster name пропущено имя группы
    Причина : Имя группы или пропущено или неверное.
    Действие : Опишите верное имя группы. Допустимое имя группы начинается с буквы, содержит не более 30: сим- волов и состоит только из букв, цифр и спецсимволов $, _ и #. Оно не должно быть зарезервированным словом. Имя должно быть напечатано сразу за ключевым словом CREATE CLUSTER.
  • ORA-00942: table or view does not exist таблица или обзор не существуют
    Причина : Данная таблица или обзор не существуют. или введено имя обзора вместо таблицы. Существующие пользовательские таблицы и обзоры можно просмотреть в обзоре TAB.
    Действие : Проверьте опечатки и не ввели ли вы имя обзор вместо таблицы. Введите существующие имена.
  • ORA-00943: cluster does not exist группа не существует
    Причина : Ресурс пользователя не включен в группу под описанным именем.
    Действие : Опишите верное имя группы сразу после ключевого слова CLUSTER.
  • ORA-00944: insufficient number of clustered columns недостаточное число сгруппированных колонок
    Причина : Была попытка создать таблицу с меньшим числом сгруппированных колонок, чем было описано в команде CREATE CLUSTER. Выражение CLUSTER команды CREATE TABLE должно описывать все сгруппированные колонки, определенные при создании группы. Используя имя группы можно просмотреть все групповые колонки в таблице словаря COL.
    Действие : Опишите все имена колонок в команде CREATE TABLE.
  • ORA-00945: specified clustered column does not exist описанная групповая колонка не существует
    Причина : Колонка, описанная в выражении оператора CREATE TABLE не является колонкой данной таблицы.
    Действие : Повторите, используя имя колонки таблицы.
  • ORA-00946: missing TO keyword пропущено ключевое слово TO
    Причина : Команда GRANT введена без ключевого слова TO или использована неверная форма этой команды.
    Действие : Проверьте синтаксис двух основных форм команды GRANT (предоставление доступа к базе данных и предоставление привилегий). Вставьте ключевое слово TO правильно в команду GRANT.
  • ORA-00947: not enough values недостаточно значений
    Причина : Опертор SQL требует двух одинаковых наборов значений, а второй набор содержит меньшее число зна- чений. Это может произойти и в случае, если в выраже- ниях WHERE или HAVING вложенная SELECT находит меньшее число колонок, как в: WHERE(A,B) IN (SELECT C FROM..) Возможна ошибка и в операторе INSERT в котором выра- жения VALUES или SELECT не содержат достаточно для INSERT значений, как в: INSERT INTO таблица (A,B) VALUES("C").
    Действие : Поверрьте численность каждого набора и сделайте их равными по числу.
  • ORA-00948: ALTER CLUSTER statement no longer supported опреатор ALTER CLUSTER более не поддерживается
    Причина : Оператор ALTER CLUSTER удален
    Действие : Для добавления данных из таблицы исполь- зуйте следущий набор операторов SQL: CREATE TABLE <новая_таблица> SELECT*FROM <старая_таблица> CLUSTER <имя_группы> DROP <старая_таблица> и RENAME TABLE <новая_таблица> <старая_таблица>.
  • ORA-00949: illegal reference to external database неверная сноска на внешнюю базу данных
    Причина :Это сообщение о внутренней ошибке, которая не может произойти при нормальной работе.
    Действие : Обратитесь к соответствуюшему наладочному обеспечению с подробным описанием проблемы.
  • ORA-00950: invalid drop optio неверная опция DROP
    Причина : После команды DROP не было опции DROP такой, как TABLE, VIEW, SYNONYM, CLUSTER, или SPACE.
    Действие : Проверьте синтаксис команды и используй- те верный формат опции DROP.
  • ORA-00951: cluster not empty группа не является пустой
    Причина : Команда DROP описывает не пустую группу. Группа может быть удалена только в том случае, если она не содержит таблиц. Удалить таблицу из группы с помощью команды DROP TABLE.
    Действие : Удалите из группы все таблицы и после этого используйте команду DROP CLUSTER.
  • ORA-00952: missing GROUP keyword пропущено ключевое слово GROUP
    Причина : Группа неверно реализована.
    Действие : От пользователя не требуется ни каких действий.
  • ORA-00953: missing index name - пропущено имя индекса
    Причина : В командах CREATE, DROP, VALIDATE INDEX имя индекса неверное или отсутствует.
    Действие : Напечатайте верное имя индекса после ключевого слова INDEX. Если вы желаете удалить или исправить индекс, проверьте имя, просмотрев обзор INDEXES. Если необходимо создать новый индекс, про- верьте сначала синтаксис.
  • ORA-00954: missing INDENTIFIED keyword пропущено ключевое слово INDENTIFIED
    Причина : Команда GRANT CONNECTION была введена без ключевого слова INDENTIFIED.
    Действие : Вставьте ключевое слово INDENTIFIED после имени пользователя. Формат команды следущий:GRANT CONNECTION TO <список пользователей> INDETIFIED BY <пароль списка>.
  • ORA-00955: name is already used by existing object имя используется существующим объектом
    Причина : Была попытка создать таблицу, обзор, группу или синоним, которые уже есть. Каждое имя поль- зовательской таблицы долно быть отличным от других имен таблиц, обзоров, групп или синонимов, принадле- жащих другим пользователям.
    Действие : Или введите уникальное имя таблицы, об- зора,группы или синонима, или измените или удалите существующее.
  • ORA-00956: invalid auditing optio - неверная опция контроля
    Причина : Была неверная опция проверки.
    Действие : Проверьте синтаксис команды и повторирте попытку с верной опцией.
  • ORA-00957: duplicate column name дублирование имени колонки
    Причина : Имя колонки было описано дважды в команде CREATE или INSERT. Имя колонки в таблице, обзоре или в группе должно быть уникальным.
    Действие : Замените в команде CREATE имя колонки на новое уникальное. В команде INSERT удалите дубли- рущее имена.
  • ORA-00958: missing CHECK keyword - пропущено ключевое слово CHECK
    Причина : Отсутствует CHECK сразу после ключевого слова WHITH в выражении WITH CHECK OPTION оператора CREATE VIEW.
    Действие : Проверьте синтаксис оператора SQL.
  • ORA-00959: space definition name does not exist - имя области не существует
    Причина : В команде A DROP SPACE описано несущест- вующее имя области.
    Действие : Используйте существующие имена определе- ния области. Для просмотра существующих имен выберите SNAME из SPACES.
  • ORA-00960: invalid INITIAL value - неверное значение INITIAL
    Причина : Было описано неверное значение номера начальной datapage или indexpage в команде CREATE SPACE. Это значение должно быть не менее 3.
    Действие : Введите значение INITIAL не меньшее 3.
  • ORA-00961: invalid INCREMENT value - неверное значение INCREMENT
    Причина : Было описано неверное значение числа шагов для datapage или indexpage. Значение шага должно быть более 3.
    Действие : Введите значение INCREMENT болшее 3.
  • ORA-00962: invalid PCTFREE value - неверное значение PCTFREE
    Причина : Неверное значение процента свободного места было описано в определении SPACE. Это значение долно находиться в диапазоне от 1: до 99.
    Действие : Введите значение PCTFREE в интервале от 1: до 99.
  • ORA-00963: invalid SIZE value неверное значение SIZE
    Причина : Было описано неверное значение размера логического блока в команде CREATE CLUSTER. Размер логического блока используется для эффективного хра- нения малых групп данных.
    Действие : Опишите допустимое значение размера логи- ческого блока (более 0).
  • ORA-00964: invalid space defenition name - неверное имя определения области
    Причина : Было описано неверное имя области в коман- де CREATE/DROP SPACE или в CREATE TABLE, или в команде CREATE TABLE описано несуществующее имя области.
    Действие : Введите верное имя области. Допустимое имя начинается с буквы, содержит не более 30: сим- волов и состоит только из букв, цифр и спецсимволов $, _ и #. Оно не должно быть зарезервированным словом. Если ваше имя верное, возможно вы нечаянно удалили определение области TEMP.
  • ORA-00965: space definition name already exists - имя определения области уже существует
    Причина : В команде CREATE SPACE было использовано существующее имя области. Имена определений областей должны быть уникальными.
    Действие : Введите уникальное имя области.
  • ORA-00966: missing TABLE keyword - пропущено ключевое слово TABLE
    Причина : Была использована команда LOCK и при этом ключевое слово TABLE было с опечаткой, или пропущено, или неверно расположено. Команда LOCK должна начи- наться так: LOCK TABLE <имя таблицы> ... .
    Действие : Вставьте ключевое слово TABLE в соот- ветствущее место.
  • ORA-00968: missing INDEX keyword - пропущено ключевое слово INDEX
    Причина : Была использована команда CREATE UNIQUE и при этом ключевое слово INDEX было с опечаткой, или пропущено, или неверно расположено.
    Действие : Проверьте синтаксис и повторите попытку.
  • ORA-00969: missing ON keyword - пропущено ключевое слово O
    Причина : Была использована команда GRANT или CREATE INDEX и при этом ключевое слово ON было с опечаткой, или пропущено, или неверно расположено.
    Действие : Вставьте ключевое слово ON в соот- ветствущее место.
  • ORA-00970: missing WITH keyword - пропущено ключевое слово WITH
    Причина : Ключевое слово START было использовано без WITH. Оба ключевых слова необходимы в выражении START WITH для запроса.
    Действие : Замените слово START на START WITH.
  • ORA-00971: missing SET keyword - пропущено ключевое слово SET
    Причина : В команде UPDATE ключевое слово SET было с опечаткой, или пропущено, или неверно распо- ложено.
    Действие : Вставьте ключевое слово SET после имени изменяемой таблицы.
  • ORA-00972: indentifier is too big - индентификатор слишком большой
    Причина : Размер имени объекта базы данных более 30: символов.(Объектами базы данных являются таблицы, группы, обзоры, индексы, синонимы, области и имена пользователей.
    Действие : Укоротите имя до максимум 30: символов.
  • ORA-00973: invalid row count estimate - неверная оценка счета строк
    Причина : Величина счета строк, описанная в команде CREATE INDEX является числом, меньшим 0.
    Действие : Опишите верное значение (большее чем 0).
  • ORA-00974: invalid index block loading factor (percentage) - неверный фактор загрузки блока индексов (процент)
    Причина : Процент назанятого объема, описанной в команде CREATE INDEX, области не принадлежит интерва- лу от 1: до 90%.
    Действие : Введите значение PCTFREE из диапазона от 1 до 90. По умолчанию - 10.
  • ORA-00975: Date + date not allowed - неразрешается данные + данные
    Причина : Попытка сложить вместе два поля данных. Данные могут быть добавлены только к полям чисел, но не к другим данным.
    Действие : Добавьте поле данных к полю чисел.
  • ORA-00977: duplicate auditing optio - двойная опция контроля
    Причина : Та же самая опция контроля была описана еще раз.
    Действие : Удалите лишнее описание контроля.
  • ORA-00978: nested set function with out GROUP BY - вложенный групповая функция без GROUP BY
    Причина : Групповая функция (такая как MIN, MAX, или AVG) была использована внутри другой групповой функции (такой как MAX(COUNT(*))) без соответствую- щего выражения GROUP BY.
    Действие : Или добавьте выражение GROUP BY или удалите внешний уровень вложенности.
  • ORA-00979: not a GROUP BY expressio выражение не принадлежит к GROUP BY
    Причина : Предложение GROUP BY не содержит всех выражений предложения SELECT. Выражения из SELECT, не включенные в групповые функции (COUNT, SUM, AVG, MAX, MIN) должны быть перечислены в предложении GROUP BY.
    Действие : Включите все выражения из SELECT, не являющиеся аргументами групповых функций в предложе- ние GROUP BY.
  • ORA-00980: synonym translation no longer valid трансляции синонима более не доступна
    Причина : Используемый вами синоним относился к таб- лице, обзору или синониму, которые удалены или переи- менованы.
    Действие : Замените синоним на имя таблицы, обзора, синонима, для которых он предназначался. Или заново создайте синоним для верных таблиц, обзоров или сино- нимов.
  • ORA-00981: cannot mix table and system-wide auditing options нет возможности совместить опцию контроля ширины таблицы и системы
    Причина : Одновременно опция ширины и таблицы и системы описаны в одном операторе AUDIT.
    Действие : Исправьте оператор.
  • ORA-00982: missing plus sign - пропущен знак плюс
    Причина : При присоединении после левой скобки нет знака плюс (+). При присоединении левая (открывающая) скобка интерпритируется как описывающая присоединение и ожидается знак плюс. Для описания присоединения к колонке, за описанием колонки следует поставить знак плюс, заключенный в скобки (+).
    Действие : Исправьте синтаксис SQL.
  • ORA-00984: column not allowed here - колонки здесь не употребимы
    Причина : Имя колонки было использовано там, где это запрещено, например в предложении VALUES оператора INSERT.
    Действие : Проверьте синтаксис команды и используйте имена колонок только там, где это допустимо.
  • ORA-00985: invalid program name - неверное имя программы
    Причина
    Действие
  • ORA-00986: missing or invalid group name(s) - пропущено или неверное имя группы
    Причина : Это свойство не реализовано.
    Действие : Не требуется ни каких действий пользователя.
  • ORA-00987: missing or invalid user name(s) - пропущено или неверное имя пользователя
    Причина : Имя пользователя не было описано в команде GRANT или одно из описанных имен неверное. Верные имена пользователей должны описываться после слова TO в команде GRANT. Допустимое имя пользователя начинается с буквы, содержит не более 30: символов и состоит только из букв, цифр и спецсимволов $, _ и #. Оно не должно быть зарезервированным словом.
    Действие : Опишите верное имя пользователя (или список пользователей) после ключевого слова TO в команде GRANT.
  • ORA-00988: missing or invalid password(s) - пропущен или неверный пароль(и)
    Причина : В команде GRANT описано имен пользователей больше, чем паролей. Допустимый пароль должен быть описан для каждого пользователя, перечисленного в команде GRANT.
    Действие : Введите правильный пароль для каждого пользователя.
  • ORA-00989: too many passwords for user names given - слишком много паролей для пользователей введено
    Причина : Паролей больше, чем было описано имен поль- зователей в команде GRANT. Только один пароль должен вводиться для каждого пользователя, перечисленного в команде GRANT.
    Действие : Введите одинаковое количество пользователей и паролей.
  • ORA-00990: missing or invalid privilege - пропущена или неверная привелегия
    Причина : В команде для привелегий GRANT не было описано никаких привелегий или одна из них неверная.
    Действие : Введите одну или более верных привелегий. Допустимы следущие привелегии: SELECT, INSERT, DELETE, UPDATE, ALTER, INDEX, DROP, CLUSTER и ALL. Более чем одну привелегию можно предоставить введя их в списке через запятую(,) или описывая словом ALL предоставлять все привелегии.
  • ORA-00991: unrecognizable format for GRANT command - неопознанный формат команды GRANT
    Причина : Введена неправильная форма команды GRANT.
    Действие : Проверьте синтаксис команды.Существует два типа команды GRANT. Первый тип используется для опре- деления доступа пользователей к базе данных и должен иметь следущий формат: GRANT CONNECT/RESOURCE/DBA TO <имя пользователя> INDENTIFIED BY <пароль>. По крайней мере одно из ключевых слов CONNECT, RESOURCE или DBA должно присутствовать. Второй тип используется для предоставления превелегий объектам базы данных и и имеет формат: GRANT <список привелегий> ON <обзор/ таблица> TO < индентификатор пользователя>/PUBLIC.
  • ORA-00992: unrecognizable format for REVOKE command - неопознанный формат команды REVOKE
    Причина : Введена неправильная форма команды REVOKE.
    Действие : Проверьте синтаксис команды и повторите ее.
  • ORA-00993: missing GRANT keyword - пропущено ключевое слово GRANT
    Причина : Ключ WITH был описан в конце команды GRANT без ключа GRANT.Чтобы предоставить привелегии пользо- вателю и разрешение на предоставление их другим поль- зователям, следует использовать ключ WITH GRANT OPTIO в конце команды GRANT.
    Действие : Замените ключевое слово WITH на WITH GRANT OPTION.
  • ORA-00994: missing OPTION keyword - пропущено ключевое слово OPTIO
    Причина : Был использован ключ WITH GRANT в конце команды GRANT без слова OPTION.
    Действие : Замените ключ WITH GRANT на WITH GRANT OPTION.
  • ORA-00995: missing or invalid synonym indentifier - пропущен или неверный синоним индентификатора
    Причина : В командах CREATE или DROP SYNONYM имя синонима или было пропущено или неверное.
    Действие : Проверьте опечатки и синтаксис команды. Правильное имя синонима должно следовать сразу за ключом SYNONYM в обеих командах. Допустимое имя синонима начинается с буквы, содержит не более 30 символов и состоит только из букв, цифр и спецсимволов $, _ и #. Оно не должно быть зарезервированным словом.
  • ORA-00996: the concatenate operator is ¦¦ not ¦ - оператором конкатенации является ||, а не |
    Причина : Единичный штрих (|) был понят как попытка описать конкатенацию, но оператор конкатенации состоит из двух штрихов (||).
    Действие : Введите двойной штрих для операции конкатенации или удалите одиночный, если конкатенация не нужна.
  • ORA-00997: illegal use of long datatype (недопустимое использование типа данных LONG).
    Причина : Вы использовали тип данных LONG, используемый для хранения данных размером более 240 символов, в функции или в предложениях WHERE, GROUP BY, ORDER BY. Значение LONG может использоваться только в предложении SELECT.
    Действие : Удалите это поле из функции или предло жения.
  • ORA-00998: must name this expression with a column label (это выражение должно называться с псевдонима).
    Причина : В команде CREATE VIEW была использована функция или выражение, но не было описано соответствущее имя колонки. Когда для обзора используется выражение или функция, все имена колонок и обзоров должны правильно быть перечислены в команде CREATE VIEW.
    Действие : Введите все имена колонок обзора в скобках после имени обзора.
  • ORA-00999: invalid view name (неверное имя представления).
    Причина : В команде CREATE VIEW пропущено или неверное имя обзора.
    Действие : Введите сразу за CREATE VIEW верное имя обзора. Допустимое имя обзора начинается с буквы, содержит не более 30 символов и состоит только из букв, цифр и спецсимволов $,_ и #. Оно не должно быть зарезервированным словом.

 

 

Это интересно: