Вечером уже глаз замылился, найти по теме ничего не могу (не там ищу?).
Вот значит какая загогулина:
Код: Выделить всё
insert into Table1 (id /* integer */, Blb /* BLOb */) values (1, 'какой-то текст');
insert into Table1 (id, Blb) values (2, null);
Если она работает просто как
Код: Выделить всё
select BLObToCString(Blb) from Table1 where id=1
union all
select BLObToCString(Blb) from Table1 where id=2
А если в процедуре... Тут начинаются странности.
Код: Выделить всё
CREATE PROCEDURE TEST(
ID INTEGER)
RETURNS (
STR VARCHAR(255))
AS
begin
select substring(BLObToCString(Blb) from 1 for 250) from Table1 where id=:id into Str;
suspend;
end
select Str from TEST(1)
union all
select Str from TEST(2)
Т.е. если в BLObToCString передаётся NULL, а результат пихается в переменную, то в ней оказывается последнее "не-NULL" значение.
Результат не меняется, если убрать substring, а размер выходной сделать максимальным объявленным в UDF (16383).
Теперь вопрос - можно ли как-то обойти это средствами самой UDF?
Такая же функция с дескрипторами, которая понимает NULL, у меня имеется, но на эту старую завязано порядка 140 процедур, очень не хочется их лопатить, да ещё нужно будет по скриптам и исходникам модулей смотреть, не зашито ли чего...