На мой взгляд хоть сервер и обрабатывает этот случай, но это баг.

Суть: если использовать в выражении CASE текстовые блобы, которые стремятся быть совместимыми со строками, то сервер ругается.

Пример:

EXECUTE BLOCK
RETURNS ( VAL BLOB SUB_TYPE TEXT )
AS
  DECLARE TYPE_CODE CHAR;

  DECLARE I INT;
  DECLARE S VARCHAR(10);
  DECLARE T BLOB SUB_TYPE TEXT;
BEGIN
  VAL = CASE TYPE_CODE
          WHEN 'I' THEN I
          WHEN 'S' THEN S
          WHEN 'T' THEN T
        END;

  SUSPEND;
END


Ошибка: Datatypes are not comparable in expression CASE.


Тут две проблемы:

1) Я не сравнивал переменные I, S и T, а сравнивал TYPE_CODE с литералами, поэтому сообщение некорректно. С точки зрения здравого смысла сравнение I, S и T производиться не должно.

2) Со строками оно работает отлично. В свете стремления сделать блоб совместимым со строкой не понятно почему для блоба оно не работает. Тем более что каждый из этих типов можно отдельно присвоить в выходную переменную без каких-либо проблем.

Ответить