На мой взгляд хоть сервер и обрабатывает этот случай, но это баг.
Суть: если использовать в выражении 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) Со строками оно работает отлично. В свете стремления сделать блоб
совместимым со строкой не понятно почему для блоба оно не работает. Тем
более что каждый из этих типов можно отдельно присвоить в выходную
переменную без каких-либо проблем.