Ora 00955 oracle что за ошибка

Обновлено: 03.07.2024

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

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

В PL/SQL используются следующие типы исключительных ситуаций:

  • встроенные исключительные ситуации;
  • исключительные ситуации, определяемые пользователем;
  • обработчик OTHERS.

Встроенные исключительные ситуации

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

Если в раздел EXCEPTION программы (блока) включена фраза

WHEN имя_исключения THEN
текст_обработчика_исключения;

В приведенном ниже триггере «shtins» использованы два типа встроенных исключительных ситуаций: NO_DATA_FOUND и TOO_MANY_ROWS.

При использовании такой таблицы и процедуры RAISE_APPLICATION_ERROR надо описать в в разделе DECLARE блока две переменных (например, errnum типа NUMBER и errtext типа VARCHAR2) и использовать в обработчике исключений конструкцию:

Исключительные ситуации, определяемые пользователем

Кроме встроенных могут быть использованы собственные исключительные ситуации, имена которых необходимо описать в разделе DECLARE блока PL/SQL (например, err_stavka EXCEPTION). В разделе EXCEPTION блока должен быть описан соответствующий обработчик исключительной ситуации, например

Обработчик OTHERS

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

Запись опубликована 09.04.2010 в 7:12 дп и размещена в рубрике Oracle7 краткий справочник. Вы можете следить за обсуждением этой записи с помощью ленты RSS 2.0. Можно оставить комментарий или сделать обратную ссылку с вашего сайта.

При первом запуске создался пакет. Я добавил процедуру и пытаюсь скомпилировать, выдает ошибку:

ORA-00955: name is already used by an existing object

Как мне пересоздать пакет?


50.4k 153 153 золотых знака 54 54 серебряных знака 211 211 бронзовых знаков 1,165 2 2 золотых знака 13 13 серебряных знаков 26 26 бронзовых знаков Покажите, как добавили процедуру и компилировали. Пока ничего криминального не видно, все должно работать. А как оно выглядит с добавленной процедурой ? Вообще очень странно, пакет просто обязан пересоздаться. И что будет если пакет предварительно удалить DROP PACKAGE При команде drop package PP появляется ошибка object PP does not exist У вас комманда содержит begin-end блок и нет завершения команды "/". Выполняются следуюшая(ие) команда(ы) в промокашке и все эти "странности" и ошибки к текущему пакету не относятся.

Не хватает завершающего символа после объявления пакета. Надо так:

Отличия и общее для завершающих символов "/" и ";" в SQl Developer следующее:

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

В одной вкладке редактора (SQL Worksheet) могут находится многочисленные запросы и анонимные блоки. Поэтому, для выполнения одного запроса или блока (по умолчанию с CTRL-ENTER), необходимо:

SQL запросы не содержащих PL/SQL блока, в частности - все DML, некоторые DDL, DCL - необходимо завершить его либо с ";", либо с "/" на новой строке.

Анонимные блоки и SQL запросы содержащие PL/SQL блок ( create . package/function/trigger/. ) или потенциально могущие его содержать ( create . type ), необходимо завершить его с "/", т.к. ";" завершает последний END в блоке.

Если SQl Developer не находит завершающих символов, он ищет их дальше по тексту, и когда их найдёт (если не найдёт, то до конца текста), посылает несколько запросов поочереди, что приводит к неопределённому результату. Обычно, к ошибке выполнения, которая не совсем понятна.

На заметку: Если запрос или блок выделить визуально, тогда SQl Developer выполнит только выделенное, даже если завершающие символы отсутствуют.

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