Ошибка оракула Ora 06512
Обновлено: 21.11.2024
Основа структуры для таблицы, в которой производится вставка:
Что такое полный стек ошибок? ORA-06512 — это просто номер строки (было бы полезно включить его), фактическая ошибка находится в стеке ошибок.
Вы можете и должны отредактировать свой вопрос, включив в него дополнительную информацию, а не публиковать его в виде комментариев, где его легко пропустить и трудно прочитать.
3 ответа 3
ORA-06512 является частью стека ошибок. Он дает нам номер строки, в которой произошло исключение, но не причину исключения. Это обычно указывается в остальной части стека (которую вы еще не опубликовали).
В комментарии вы сказали
"тем не менее, ошибка возникает, когда pNum не находится между 12 и 14; когда pNum находится между 12 и 14, ошибка не возникает"
Ну, ваш код делает это:
То есть возникает исключение, когда pNum не находится между 12 и 14. Так включает ли остальная часть стека ошибок эту строку?
ORA-06510: PL/SQL: необработанное пользовательское исключение
Если это так, все, что вам нужно сделать, это добавить блок исключения для обработки ошибки. Возможно:
Документация подробно описывает обработку исключений PL/SQL.
Переменная pCv имеет тип VARCHAR2, поэтому, когда вы объединяете вставку, вы не заключаете ее в одинарные кавычки:
Кроме того, ошибка ORA-06512 возникает, когда вы пытаетесь вставить слишком большое значение в столбец. Проверьте определение таблицы M_pNum_GR и параметры, которые вы отправляете. Просто для уточнения, если вы попытаетесь вставить значение 100 в поле NUMERIC(2), возникнет ошибка.
Невозможно сделать это, так как это происходит попарно; VALUES('''||pCv||''', ' тем не менее, ошибка появляется, когда pNum не находится между 12 и 14; когда pNum находится между 12 и 14, ошибка не возникает
Не могли бы вы прикрепить DDL одной из ваших таблиц M_pNum_GR? А вы уверены, что у всех одинаковая структура?
CREATE TABLE "DB". "M12GR" ("IDM12GR" NUMBER(10,0) NOT NULL ENABLE, "CV" VARCHAR(5) NOT NULL ENABLE, "SUP" FLOAT(126) NOT NULL ENABLE, "IDM12 " ЧИСЛО (10,0) НЕ НУЛЕВОЕ ВКЛЮЧЕНО, ОГРАНИЧЕНИЕ "PRIMARY_30" ПЕРВИЧНЫЙ КЛЮЧ ("IDM12GR") ИСПОЛЬЗОВАНИЕ ИНДЕКС PCTFREE 10 INITRANS 2 MAXTRANS 255 ХРАНИЛИЩЕ СТАТИСТИЧЕСКИХ ВЫЧИСЛЕНИЙ (ИСХОДНОЕ 65536 СЛЕДУЮЩЕЕ 1048576 MINEXTENTS 1 MAXEXTENTS 1 MAXEXTENTS 1147483645 FREEOLPSOULPSBULGRASE 1 PCTFREASE DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "DB" ENABLE, CONSTRAINT "M12SUELORM12" FOREIGN KEY ("IDM12") REFERENCES "DB"."M12" ("IDM12") ENABLE)
Узнайте причину и способы устранения сообщения об ошибке ORA-06512 в Oracle.
Описание
При возникновении ошибки ORA-06512 появится следующее сообщение об ошибке:
Причина
Эта ошибка вызвана раскручиванием стека из-за необработанных исключений в коде PLSQL.
- Исправьте условие, вызывающее необработанную ошибку.
- Напишите обработчик исключения для этой необработанной ошибки.
- Обратитесь за помощью к своему администратору баз данных.
Сообщение об ошибке ORA-06512 указывает номер строки необработанной ошибки в коде PLSQL. Это весьма полезно при устранении неполадок.
Разрешение
Давайте рассмотрим пример устранения ошибки ORA-06512 путем исправления состояния ошибки.
Например, если вы создали процедуру с именем TestProc следующим образом:
Эта процедура успешно создана. Но когда мы попытаемся выполнить эту процедуру, мы получим ошибку ORA-06512 следующего вида:
Первая строка сообщения об ошибке (например, ORA-06502) указывает на возникшую ошибку, а вторая строка сообщения об ошибке (например, ORA-06512) указывает на то, что ошибка произошла в строке 5 кода PLSQL. .
В этом примере вы пытались присвоить 3-значное число переменной с именем v_number, которая может обрабатывать только 2 цифры. Вы можете исправить эту ошибку, переопределив переменную v_number как число (3).
И теперь, когда мы выполняем нашу процедуру TestProc, ошибка ORA-06512 устранена.
Давайте рассмотрим пример устранения ошибки ORA-06512 путем написания обработчика исключений.
Например, если вы создали процедуру с именем TestProc следующим образом:
Эта процедура успешно создана. Но когда мы попытаемся выполнить эту процедуру, мы получим ошибку ORA-06512 следующего вида:
Первая строка сообщения об ошибке (например, ORA-06502) указывает на возникшую ошибку, а вторая строка сообщения об ошибке (например, ORA-06512) указывает на то, что ошибка произошла в строке 5 кода PLSQL. .
В этом примере вы пытались присвоить 3-значное число переменной с именем v_number, которая может обрабатывать только 2 цифры. Вы можете исправить это, написав обработчик исключений, чтобы установить для переменной v_number значение 99 (чтобы это было только 2 цифры), когда возникает эта ошибка.
И теперь, когда мы выполняем нашу процедуру TestProc, ошибка ORA-06512 устранена.
Сообщение об ошибке ORA-06512
Ошибка Ora-06512 означает сообщение обратной трассировки, поскольку стек раскручивается из-за необработанных исключений в вашем коде PLSQL. Это общая ошибка для исключений PLSQL, и она часто встречается.
Ora-06512 указывает не фактическую ошибку, а номер строки необработанной ошибки в коде PLSQL. Ora-06512 обычно появляется в стеке сообщений, в котором предыдущее сообщение называет причину ошибки, например, в следующем примере:
ORA-06502: PL/SQL: ошибка числа или значения
ORA-06512: строка 12
Предыдущее сообщение указывает причину ошибки («ошибка числа или значения»), а Ora-06512 указывает номер строки ошибки (строка 12).
Есть 3 способа решить проблему Ora-06512:
Исправьте ошибку, вызвавшую необработанную ошибку.
Напишите обработчик необработанной ошибки.
Обратитесь к администратору базы данных (DBA).
Решение
Этапы исправления ошибки будут зависеть от самой ошибки. Это пример сообщения Ora-06512 в процедуре «AProc», для которой исправлена ошибка:
CREATE OR REPLACE PROCEDURE AProc
При написании этой процедуры вы увидите следующее сообщение об ошибке:
выполнить AProc();
НАЧАТЬ AProc(); КОНЕЦ;
ОШИБКА в строке 1:
ORA-06502: PL/SQL: ошибка числа или значения: слишком большая точность числа
ORA-06512: в «EXAMPLE.APROC», строка 5
ORA-06512: в строке 1
Предыдущая ошибка указывает пользователю на ошибку (слишком большая точность числа). Ora-06512 указывает номер строки, в которой произошла ошибка (строка 5). В данном случае ошибка произошла из-за того, что переменной a_number было присвоено 4-значное число, которое настроено на обработку только 3-значного числа. Ошибка устранена путем установки переменной a_number для обработки 4 цифр:
СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ПРОЦЕДУРУ AProc
Написать обработчик исключений
Чтобы устранить ту же примерную ошибку, что и выше, вы можете написать обработчик исключений, а не исправлять ошибку. Вот как можно написать обработчик исключений:
СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ПРОЦЕДУРУ AProc
КОГДА ДРУГИЕ ТОГДА
Поскольку переменная a_number может обрабатывать только 3 цифры, вы можете написать обработчик исключений, чтобы задать для переменной a_number 3 цифры (999) при возникновении этой ошибки.
Если вы не можете устранить ошибку, исправив ее или написав обработчик исключений, обратитесь к своему администратору баз данных.
Знатоки баз данных узнают имя Oracle как лидера в мире систем управления реляционными базами данных (СУБД). Oracle десятилетиями выпускала очень мощные решения СУБД и остается лидером в этой области. Многие конечные пользователи продуктов баз данных могут быть сбиты с толку или сбиты с толку, когда они используют предварительно разработанное решение, и оно генерирует сообщение об ошибке. Одним из распространенных сообщений об ошибках, создаваемых Oracle, является ошибка ORA-06512.
Oracle – это система управления базами данных, которая в различных формах существует уже сорок лет. Первоначально он использовал так называемую схему SCOTT, названную в честь одного из первых сотрудников Oracle. Вы даже впервые вошли в Oracle с именем пользователя «Скотт» и паролем «тигр», который назван в честь кота Скотта. Сейчас используется несколько схем в зависимости от того, для чего вы используете Oracle.
Если вы хотите узнать больше об Oracle с нуля, эта страница будет очень полезна.
Исправление ошибок ORA-06512
Ошибка ORA-06512 в Oracle — это общая ошибка исключения, которая сообщает вам, где что-то идет не так. Это одна из наименее специфичных ошибок, создаваемых Oracle, поскольку она говорит вам только о наличии проблемы, но не о том, что происходит не так.
Например, типичное сообщение об ошибке может выглядеть так:
"ORA-01422: точная выборка возвращает больше запрошенного количества строк
ORA-06512: в «DATABASE_NAME», строка 66
ORA-06512: строка 1″
В первой строке сообщается, какой тип ошибки произошел. В данном случае запрос возвращает больше данных, чем ожидает запрос, поэтому он не знает, как с этим справиться. Код «ORA-01422» — это фактический код ошибки, на который вам нужно обратить внимание. ORA-06512 — это всего лишь общий код ошибки.
Во второй строке указано, где возникает ошибка. DATABASE_NAME будет любой базой данных, в которой вы работаете в данный момент. Строка 66 — это строка, в которой возникает ошибка, и ее нужно проверить, чтобы исправить ошибку.
Третья строка синтаксиса ошибки указывает, откуда поступил вызов. Проверьте первую строку, и вы увидите вызов DATABASE_NAME.
Чтобы исправить эту конкретную ошибку, вам нужно исправить проблему, вызванную ORA-01422, которая заключается в том, что "точная выборка возвращает больше, чем запрошенное количество строк", или вам нужно добавить обработчик исключений, чтобы указать Oracle игнорировать ее. Так как решение основной проблемы всегда предпочтительнее, это правильный путь.
Вы можете сделать две вещи. Если вы ожидаете, что запрос вернет более одной строки, вы можете изменить его, чтобы он не удивился. Если вы ожидаете, что запрос вернет только одну строку, вы также можете изменить его для этого.
Ожидается более одной строки:
для X in (выберите * из t, где …)
— здесь обработать запись X
Это должно устранить ошибку в запросах к базе данных, когда возвращалось более одной строки.
Если вы ожидаете, что будет возвращена только одна строка, вы можете попробовать:
когда NO_DATA_FOUND, то
код обработки ошибок, когда запись не найдена
когда TOO_MANY_ROWS, то
код обработки ошибок, когда найдено слишком много записей
Этот второй метод должен доставить только одну строку, не выдавая ошибку «ORA-01422: точная выборка возвращает больше запрошенного количества строк» и, следовательно, исходную ошибку ORA-06512.
Вы также можете настроить запрос так, чтобы он возвращал только первую строку многострочного ответа. Это может сработать, если у вас нет полного контроля над базой данных или вы не хотите слишком много возиться с вещами, но вам все же нужен ответ.
c1 курсор для выбора * из t, где …
если ( c1%notfound ), то
обработка ошибок при отсутствии записей
(Если вы знаете SQL, вас могут немного смутить эти командные строки... Oracle не использует Transact-SQL, а использует собственное расширение процедурного языка SQL, PL/SQL. Хотя он похож на Transact-SQL, PL /SQL делает много умных вещей и сам по себе является очень мощным инструментом. Этот FAQ по PL/SQL может оказаться полезным при изучении Oracle.)
Итак, основной урок здесь заключается в том, что ошибка ORA-06512 сама по себе не является чем-то, что вы можете исправить напрямую. Вместо этого вам нужно выяснить, в чем заключается фактическая ошибка, о чем вам сообщат другие коды ошибок, а затем устранить эти ошибки одну за другой.
Можете ли вы поделиться советами или рекомендациями по работе с Oracle? Дайте нам знать о них в комментариях!
Знатоки баз данных узнают имя Oracle как лидера в мире систем управления реляционными базами данных (СУБД). Oracle десятилетиями выпускала очень мощные решения СУБД и остается лидером в этой области. Многие конечные пользователи продуктов баз данных могут быть сбиты с толку или сбиты с толку, когда они используют предварительно разработанное решение, и оно генерирует сообщение об ошибке. Одним из распространенных сообщений об ошибках, создаваемых Oracle, является ошибка ORA-06512.
Oracle – это система управления базами данных, которая в различных формах существует уже сорок лет. Первоначально он использовал так называемую схему SCOTT, названную в честь одного из первых сотрудников Oracle. Вы даже впервые вошли в Oracle с именем пользователя «Скотт» и паролем «тигр», который назван в честь кота Скотта. Сейчас используется несколько схем в зависимости от того, для чего вы используете Oracle.
Если вы хотите узнать больше об Oracle с нуля, эта страница будет очень полезна.
Исправление ошибок ORA-06512
Ошибка ORA-06512 в Oracle — это общая ошибка исключения, которая сообщает вам, где что-то идет не так. Это одна из наименее специфичных ошибок, создаваемых Oracle, поскольку она говорит вам только о наличии проблемы, но не о том, что происходит не так.
Читайте также: