Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.13;
Скачать: CL | DM;

Вниз

Исключения в UDF   Найти похожие ветки 

 
Known Unknown   (2004-05-24 13:50) [0]

Добрый день!
Каким образом вызвать исключение из функции в UDF
так, чтобы IB/FB не отключился от БД или как-нибудь не глюканул
и все такое ???


 
y-soft ©   (2004-05-24 14:30) [1]

Лучше всего - перехватывайте и обрабатывайте исключения прямо в UDF (через try..except, try..finally), а в вызывающую процедуру возвращайте код ошибки. Получив такой код хранимая процедура может сама принудительно сгенерировать исключение IB (EXCEPTION <ExceptionName>).

Сложность тут в том, что UDF может вернуть только одно значение, поэтому придется предусмотреть какие-то специальные возвращаемые значения для таких случаев.

В противном случае рискуете не только потерять соединение с базой, но и вообще вызвать аварийное завершение сервера БД с непредсказуемыми последствиями


 
Known Unknown   (2004-05-24 14:45) [2]

Например,
SELECT UDF_FUNC(...) FROM TAB
Допустим, мне нужно выдать ошибку и прервать запрос
как бы из UDF_FUNC().
Неужели, это можно сделать только с помощью Хр.Проц.???


 
y-soft ©   (2004-05-24 16:12) [3]

SELECT UDF_FUNC(...) FROM TAB

Здесь Вы вызываете не непосредственно UDF_FUNC, а даете команду серверу БД. Соответственно исключение в UDF_FUNC произойдет в процессе сервера. Сервер, конечно, постарается его самостоятельно обработать, но это не всегда возможно (не забывайте, что обычно серверный процесс выполняется под учетной записью Local System и из UDF можно натворить многое), поэтому для надежности лучше обрабатывайте их непосредственно в UDF_FUNC и используйте SELECT <field_list> FROM STORED_PROC(...)


 
Digitman ©   (2004-05-24 16:16) [4]


> Неужели, это можно сделать только с помощью Хр.Проц


да.
или в триггере, или в SP или во взгляде должна присутствовать WHEN-конструкция, обрабатывающая программное исключение.

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



Страницы: 1 вся ветка

Текущий архив: 2004.06.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.043 c
1-1085841028
Илья
2004-05-29 18:30
2004.06.13
Получение приватного значения одного класса из другого


1-1085746601
nitrino
2004-05-28 16:16
2004.06.13
Как достать WideString из DLL


3-1085126461
Sirruf
2004-05-21 12:01
2004.06.13
Не открывается БД по сети :((


1-1086158175
Anton
2004-06-02 10:36
2004.06.13
Типы данных


1-1086177469
doma
2004-06-02 15:57
2004.06.13
Работа с *.dfm файлами