Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: -0.978 c
14-1085488754
Hatter
2004-05-25 16:39
2004.06.13
Gigabyte GA-8S648


3-1085404186
REA
2004-05-24 17:09
2004.06.13
ComboBox


4-1083820741
Chris
2004-05-06 09:19
2004.06.13
Помогите извлечь флешку


14-1085519359
Thor
2004-05-26 01:09
2004.06.13
X Files - чем дело закончилось?


1-1085587061
vajo
2004-05-26 19:57
2004.06.13
Заставка




   Наверх