Вниз
Скачать: 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.048 c
1-1086165837
Фдуч
2004-06-02 12:43
2004.06.13
Вызов формы из процесса


1-1085726435
evgen
2004-05-28 10:40
2004.06.13
Как избежать абсолютных ссылок?


8-1081005582
новичок_из_сыктывкара
2004-04-03 19:19
2004.06.13
изменяя положение TTrackBar...


1-1085660831
lamer
2004-05-27 16:27
2004.06.13
первое вхождение подстроки без применения POS


1-1085753261
IceClimber
2004-05-28 18:07
2004.06.13
Как вставить TComboBox в MainMenu...




   Наверх