Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Exception в UDF
|
|||
|---|---|---|---|
|
#18+
Не могу нигде найти примера использования чего-нибудь наподобии Ехсерtion в UDF. Все попытки пристроить подобие - DECLARE SQLCODE INTEGER DEFAULT 0; DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND SET errorCode = SQLCODE; из примеров ХП не проходит по синтаксису. Простая задача, внутри UDF достойно отреагировать на произвольную ошибочную ситуацию и никак. Может кто видел пример, или в принципе нельзя? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2006, 19:30 |
|
||
|
Exception в UDF
|
|||
|---|---|---|---|
|
#18+
SQL Функции в DB2 - это особая фича. Они на самом деле не компилятся, а встраиваются в SQL. Т.е. не воспринимайте ее как подпрограмму (процедуру). Воспринимайте ее как макрос. Отсюда и ограничения в синтаксисе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2006, 12:12 |
|
||
|
Exception в UDF
|
|||
|---|---|---|---|
|
#18+
SIGNAL там разрешен, только "нетриггерной" формы. Да и RAISE_ERROR ( sqlstate , diagnostic-string ) никто не отменял....Или я условия не понял? Тогда извиняюсь, я только учусь.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2006, 13:21 |
|
||
|
Exception в UDF
|
|||
|---|---|---|---|
|
#18+
да, извиняюсь, правда не понял :-/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2006, 13:29 |
|
||
|
Exception в UDF
|
|||
|---|---|---|---|
|
#18+
Если пишешь UDF сам, то есть возможность указать SqlState и MsgText. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2006, 13:49 |
|
||
|
Exception в UDF
|
|||
|---|---|---|---|
|
#18+
Уточняю вопрос примером 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 приводит к необходимости посимвольного разбора даты с учетом високостности года, к чему вынужден сейчас и приступить за отсутствием понимания иного выхода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2006, 14:09 |
|
||
|
Exception в UDF
|
|||
|---|---|---|---|
|
#18+
Можете начинать писать свою UDF. Рекомендую реализовать на С/С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2006, 14:28 |
|
||
|
Exception в UDF
|
|||
|---|---|---|---|
|
#18+
На чём пишешь UDF? http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/r0004461.htm Посмотри пример на C. ЗЫ: Хотя сам пишу на Delphi :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2006, 14:31 |
|
||
|
Exception в UDF
|
|||
|---|---|---|---|
|
#18+
Не красиво как то сразу в С. Да и коллеги с 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2006, 14:59 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=33666784&tid=1605407]: |
0ms |
get settings: |
5ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 242ms |
| total: | 390ms |

| 0 / 0 |
