powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Exception в UDF
10 сообщений из 10, страница 1 из 1
Exception в UDF
    #33665600
ValPot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не могу нигде найти примера использования чего-нибудь наподобии Ехсерtion в UDF. Все попытки пристроить подобие -


DECLARE SQLCODE INTEGER DEFAULT 0;
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND
SET errorCode = SQLCODE;


из примеров ХП не проходит по синтаксису.

Простая задача, внутри UDF достойно отреагировать на произвольную ошибочную ситуацию и никак. Может кто видел пример, или в принципе нельзя? Спасибо.
...
Рейтинг: 0 / 0
Exception в UDF
    #33666784
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL Функции в DB2 - это особая фича. Они на самом деле не компилятся, а встраиваются в SQL. Т.е. не воспринимайте ее как подпрограмму (процедуру). Воспринимайте ее как макрос. Отсюда и ограничения в синтаксисе.
...
Рейтинг: 0 / 0
Exception в UDF
    #33667118
Astron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SIGNAL там разрешен, только "нетриггерной" формы. Да и RAISE_ERROR ( sqlstate , diagnostic-string ) никто не отменял....Или я условия не понял? Тогда извиняюсь, я только учусь....
...
Рейтинг: 0 / 0
Exception в UDF
    #33667155
Astron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, извиняюсь, правда не понял :-/
...
Рейтинг: 0 / 0
Exception в UDF
    #33667239
Фотография Alexey Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если пишешь UDF сам, то есть возможность указать SqlState и MsgText.
...
Рейтинг: 0 / 0
Exception в UDF
    #33667320
ValPot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уточняю вопрос примером ORACLE функции, которую надо повторить для сохранения переносимости приложения

function f_AsDate (s varchar(255)) return date as
begin
return to_date(s,'DD.MM.YYYY HH24:MI:SS');
exception
when others then
return to_date( '30.12.1899','DD.MM.YYYY');
end;
end f_AsDate

Смысл exception - вернуть аналог "NULL" в случае когда на вход попадает не дата в ожидаемом формате, а например фамилия.
Отсутствие exception приводит к необходимости посимвольного разбора даты с учетом високостности года, к чему вынужден сейчас и приступить за отсутствием понимания иного выхода.
...
Рейтинг: 0 / 0
Exception в UDF
    #33667400
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можете начинать писать свою UDF. Рекомендую реализовать на С/С++.
...
Рейтинг: 0 / 0
Exception в UDF
    #33667413
Фотография Alexey Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На чём пишешь UDF?
http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/r0004461.htm

Посмотри пример на C.


ЗЫ: Хотя сам пишу на Delphi :)
...
Рейтинг: 0 / 0
Exception в UDF
    #33667500
ValPot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не красиво как то сразу в С.

Да и коллеги с ISeries подзуживают.


Не знаю....
Может быть Вам пользоватся стандартными средствами ?
Run SQL Script:
> CREATE FUNCTION asamods.F_ASDATE (S VARCHAR(255)) RETURNS DATE
LANGUAGE SQL
SPECIFIC F_ASDATE
DETERMINISTIC READS SQL DATA CALLED ON NULL INPUT
BEGIN
DECLARE RES DATE;
DECLARE InvalidDate CONDITION FOR '22007';
DECLARE EXIT HANDLER FOR InvalidDate BEGIN
RETURN CAST('1899-12-30' AS DATE);
SIGNAL SQLSTATE '01HDI' SET MESSAGE_TEXT='Invalid date';
END;
SET RES =DATE( S );
RETURN RES;
END

Оператор выполнен успешно (1640 мс)


Куда податься крестьянину на DB2 Exspress-C под Win?

CREATE FUNCTION F_ASDATE (S VARCHAR(255))
RETURNS DATE
LANGUAGE SQL
SPECIFIC F_ASDATE
DETERMINISTIC
READS SQL DATA
CALLED ON NULL INPUT
BEGIN ATOMIC
DECLARE RES DATE;
DECLARE InvalidDate CONDITION FOR '22007';
DECLARE EXIT HANDLER FOR InvalidDate
BEGIN
RETURN CAST('1899-12-30' AS DATE);
SIGNAL SQLSTATE '01HDI' SET MESSAGE_TEXT='Invalid date';
END;
SET RES =DATE( S );
RETURN RES;
END
DB21034E Данная команда обрабатывалась как оператор SQL, поскольку она не
является допустимой командой процессора командной строки. При обработке SQL
было получено сообщение:
SQL0104N Обнаружен неправильный элемент "FOR" после текста "DECLARE EXIT
HANDLER". Список правильных элементов:
"<SQL_variable_condition_declaration>". LINE NUMBER=11. SQLSTATE=42601

SQL0104N Обнаружен неправильный элемент "FOR" после текста "DECLARE EXIT HANDLER". Список правильных элементов: "<SQL_variable_condition_declaration> ".

Объяснение:

Синтаксическая ошибка в операторе SQL или во входной строке
команды для процедуры SYSPROC.ADMIN_CMD, где указанный элемент
следует после текста "<текст>". В поле "<текст>" показаны 20
символов оператора SQL или входной строки команды для процедуры
SYSPROC.ADMIN_CMD непосредственно перед неверным элементом.

В качестве подсказки поле SQLERRM области SQLCA содержит
частичный список правильных элементов в виде
"<список-элементов>". При составлении этого списка
подразумевается, что предыдущая часть оператора не содержит
ошибок.

Оператор невозможно обработать.

Действия пользователя:

Проверьте и исправьте оператор в области указанного элемента.

sqlcode : -104

sqlstate : 42601
...
Рейтинг: 0 / 0
Exception в UDF
    #33667660
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iSeries - отдельная песня. Из всех трех DB2 на этой платформе самые широкие возможности. Я правда не знаю точно, но думаю там препроцессор на сервере из SQL в С все переписывает и компилит.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Exception в UDF
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]