Вообщем сейчас убегаю, завтра подниму свои UDF-ки, вспомню и доложусь...


Вот освежил память. Набросал UDF:

function gettype(v : PDSC) : integer; cdecl;
begin
   Result := v.dsc_dtype;
end;

DECLARE EXTERNAL FUNCTION GETTYPE
   VARCHAR(100) BY DESCRIPTOR
RETURNS INTEGER BY VALUE
ENTRY_POINT 'GETTYPE' MODULE_NAME 'TstUdf'

запрос
select gettype(1), gettype('1'), gettype(current_date) from rdb$database
возвращает
9, 1, 14

То бишь в Udf передаются по by descriptor именно то, что в параметр запихнул, без cast-ов. А вот если результат объявить как varchar(100) by descriptor ,то похоже если в нем возвращать int или любой другой тип, после получения его из UDF он будет кастится к varchar(100) ...

With b/r. Gleb.

Ответить