Обработка исключений и ошибок PL / SQL - PullRequest
1 голос
/ 28 января 2011

Я делаю проект в Asp .Net и C #.Я также использую ODP .NET для подключения к моей базе данных Oracle.

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

У меня есть 3 исключения:

  1. , когда значение, которое я пытаюсь вставить, уже существует в базе данных
  2. , когда я пытаюсь вставить нулевое значение
  3. По умолчанию "Others"

Когда возникают первые два исключения, я вставляю ошибку в таблицу Errors, все идет хорошо.

Что я действительно хочу знать, так это какя могу показать сообщение пользователю, когда возникает Исключение?

Что-то вроде dbms_output.put_line("Error"); ... но я хочу, чтобы оно отображалось на моей веб-странице.Возможно ли это?

Любые советы приветствуются, заранее.

Ответы [ 3 ]

4 голосов
/ 28 января 2011

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

Другими словами, вы должны удалить исключение «когда другие» из вашего кода PL / SQL и вместо этого обернуть ваш вызов базы данных (используя ODP.NET) блоком исключения C #. Там вы можете поймать исключение, получить номер и текст ошибки Oracle и показать его пользователю, если хотите.

(Используя этот подход, вы также можете использовать RAISE_APPLICATION_ERROR в вашем PL / SQL-коде, чтобы сообщать об ошибках обратно клиенту C #.)

1 голос
/ 28 января 2011

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

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

0 голосов
/ 28 января 2011

В наших хранимых процедурах на сервере sql есть что-то вроде этого:

IF @@ ERROR <> 0

return (1)

ELSE

return (0)

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

...