Anonim

Специалисты по базам данных узнают имя Oracle в качестве лидера в мире систем управления реляционными базами данных (СУБД). Oracle десятилетиями выпускала высокопроизводительные СУБД и остается лидером в этой области. Многие конечные пользователи продуктов баз данных могут быть сбиты с толку или сбиты с толку, когда они используют предварительно разработанное решение, и оно генерирует сообщение об ошибке. Одним из распространенных сообщений об ошибках, генерируемых Oracle, является ошибка ORA-06512.

Также смотрите нашу статью Как исправить ошибку ora-00942

Oracle - это система управления базами данных, которая существует в течение сорока лет в различных формах. Первоначально он использовал нечто, называемое схемой SCOTT, названное в честь одного из первоначальных сотрудников Oracle. Вы даже впервые зашли в Oracle с именем пользователя «scott» и паролем «тигр», который назван в честь кота Скотта. Теперь есть несколько схем, используемых в зависимости от того, для чего вы используете Oracle.

Если вы хотите узнать больше об Oracle с нуля, эта страница очень полезна.

Исправление ошибок ORA-06512

В Oracle ошибка ORA-06512 - это общая ошибка исключения, которая указывает, где что-то идет не так. Это одна из наименее специфических ошибок, производимых Oracle, поскольку она говорит вам только о том, что есть проблема, но не то, что идет не так.

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

«ORA-01422: точная выборка возвращает больше запрошенного количества строк

ORA-06512: в «DATABASE_NAME», строка 66

ORA-06512: в строке 1 ″

Первая строка сообщает вам, какой тип ошибки происходит, в этом случае запрос возвращает больше данных, чем ожидал запрос, поэтому он не знает, как ее обработать. Код «ORA-01422» - это фактический код ошибки, на который вам нужно обратить внимание. ORA-06512 - это просто общий код ошибки.

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

Третья строка в синтаксисе ошибки сообщает вам, откуда поступил вызов. Проверьте первую строку, и вы увидите звонок DATABASE_NAME.

Чтобы исправить эту конкретную ошибку, вам нужно устранить проблему, вызванную ORA-01422, которая заключается в том, что «точная выборка возвращает больше, чем запрошенное количество строк», или вам нужно добавить обработчик исключений, чтобы указать Oracle игнорировать его. Поскольку исправление основной проблемы всегда предпочтительнее, это путь.

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

Ожидается более одной строки:

для X в (выберите * из т, где …)

петля

- обработать X запись здесь

концевой цикл;

Это должно устранить ошибку в запросах к базе данных, когда будет возвращено более одной строки.

Если вы ожидаете, что будет возвращена только одна строка, вы можете попробовать:

начать

выберите * в …

откуда т …

процесс….

исключение

когда NO_DATA_FOUND тогда

код обработки ошибок, когда запись не найдена

когда TOO_MANY_ROWS тогда

код обработки ошибок при обнаружении слишком большого количества записей

конец;

Этот второй метод должен доставить только одну строку, не выдавая ошибку «ORA-01422: точная выборка возвращает больше запрошенного количества строк» ​​и, следовательно, исходную ошибку ORA-06512.

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

объявлять

c1 курсор для выбора * из т, где …

начать

открыть с1;

получить c1 в ..

if (c1% notfound) тогда

обработка ошибок для записи не найдена

конец если;

закрыть с1;

конец;

(Если вы знаете SQL, вы можете быть немного смущены этими командными строками … Oracle не использует Transact-SQL, а скорее является собственным расширением процедурного языка SQL, PL / SQL. Хотя PL / SQL похож на Transact-SQL, много умных вещей и сам по себе очень мощный инструмент. Этот FAQ по PL / SQL может оказаться полезным при попытке узнать об Oracle.)

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

Есть ли у вас какие-либо советы или рекомендации Oracle? Дайте нам знать о них в комментариях!

Как исправить ошибки ora-06512 в oracle db