А что ты ожидал ?

   Аргумент HASH приводится внутри к строке и уже она хешируется.
Уж не знаю хорошо это или где...

Меня бы вполне устроило если бы он приводил к строке, ноон то приводит, то не приводит. Вот полный вариант:

EXECUTE BLOCK (
  "Value" BLOB SUB_TYPE TEXT = ?VALUE )
RETURNS (
  "Type" VARCHAR(20),
  "Hash" BIGINT )
AS
BEGIN
  "Type" = 'BLOB TEXT';
  "Hash" = HASH(CAST("Value" AS BLOB SUB_TYPE TEXT));
  SUSPEND;

  "Type" = 'BIGINT';
  "Hash" = HASH(CAST("Value" AS BIGINT));
  SUSPEND;

  "Type" = 'INT';
  "Hash" = HASH(CAST("Value" AS INT));
  SUSPEND;

  "Type" = 'SMALLINT';
  "Hash" = HASH(CAST("Value" AS SMALLINT));
  SUSPEND;

  "Type" = 'VARCHAR(100)';
  "Hash" = HASH(CAST("Value" AS VARCHAR(100)));
  SUSPEND;

  "Type" = 'DOUBLE PRECISION';
  "Hash" = HASH(CAST("Value" AS DOUBLE PRECISION));
  SUSPEND;

  "Type" = 'FLOAT';
  "Hash" = HASH(CAST("Value" AS FLOAT));
  SUSPEND;

  "Type" = 'NUMERIC(18, 4)';
  "Hash" = HASH(CAST("Value" AS NUMERIC(18, 4)));
  SUSPEND;

  "Type" = 'NUMERIC(15, 2)';
  "Hash" = HASH(CAST("Value" AS NUMERIC(15, 2)));
  SUSPEND;

  "Type" = 'DECIMAL(18, 4)';
  "Hash" = HASH(CAST("Value" AS DECIMAL(18, 4)));
  SUSPEND;

  "Type" = 'DECIMAL(15, 2)';
  "Hash" = HASH(CAST("Value" AS DECIMAL(15, 2)));
  SUSPEND;
END

Ответить