Главная страница
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.021 c
6-1082736717
Piter
2004-04-23 20:11
2004.06.13
TTcpClient


3-1085067034
Filin
2004-05-20 19:30
2004.06.13
перекрестный запрос


8-1080891336
graf
2004-04-02 11:35
2004.06.13
Font


1-1085688490
SergP
2004-05-28 00:08
2004.06.13
Переопределение деструктора класса.


1-1085834098
killer
2004-05-29 16:34
2004.06.13
Размер шрифта