Гость
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / Оператор CASE в функциях. / 4 сообщений из 4, страница 1 из 1
29.06.2011, 13:17
    #37328732
Tesla13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оператор CASE в функциях.
Читаю доку, делаю попутно примеры, дошел до CASE... и нифига понять не могу -

Написано
Example of CASE Statement
In the following example, the CASE statement initializes one of a set of SPL
variables (named j, k, l, and m) to the value of an SPL variable named x,
depending on the value of another SPL variable named i:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CASE i
WHEN  1  THEN
LET j = x;
WHEN  2  THEN
LET k = x;
WHEN  3  THEN
LET l = x;
WHEN  4  THEN
LET m = x;
ELSE
RAISE EXCEPTION  100 ; --illegal value
END CASE

Делаю пример функции -
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE FUNCTION sp_test2(i INT)
RETURNING VARCHAR( 255 );

CASE i
WHEN  1  THEN
RETURN 'Test 1';
WHEN  2  THEN
RETURN 'Test 2';
WHEN  3  THEN
RETURN 'Test 3';
WHEN  4  THEN
RETURN 'Test 4';
END CASE;

RETURN 'Test END';
END FUNCTION;
Говорит ошибка синтаксиса и указывает на CASE...

И да конечно можно заменить IF-фом с кучей ELIF но, из той же доки - "The CASE statement is a fast alternative to the IF statement.".
И можно конечно изменить приведенное так (CASE как функция...) -
Код: plaintext
1.
2.
3.
4.
5.
6.
RETURN CASE i
WHEN  1  THEN 'Test 1'
WHEN  2  THEN 'Test 2'
WHEN  3  THEN 'Test 3'
WHEN  4  THEN 'Test 4'
ELSE 'Test END' 
END;
но, это просто пример, а если нужно (и это даже более вероятно), не просто замена, а выполнение операторов в CASE, т.е. именно так как в доке написано...

Вопрос, а вообще работает такой вариант как в доке? Ну, "отдельно стоящим" оператором, с выполнением других в "ветках". От версии информикса не зависит (у нас 9-я)?
...
Рейтинг: 0 / 0
29.06.2011, 18:14
    #37329468
Tesla13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оператор CASE в функциях.
Вот же, ж ... жаль матом нельзя.
Only Extended Parallel Server supports the CASE statement.

А у меня в локальном PDF этого нету...
...
Рейтинг: 0 / 0
29.06.2011, 22:27
    #37329687
Tesla13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оператор CASE в функциях.
Понятно теперь, что раз у меня выполняется не в "Extended Parallel Server" то значит как "Dynamic Server", но что это значит?
(и кстати то, что относится к первому, в локальной PDF доке помечается скромным маленьким значком "XPS" в левом верхнем углу страницы... знать бы еще, что на него нужно было обращать внимание. нда, тщательней нада. ну да ладно)

В смысле чем "грозит" использование "Dynamic Server", если не считать не поддерживание CASE, он что медленнее работает? Менее надежно? /еще чего то?
Типа, похоже на Firebird Super Server? Где коннект к базе создает процесс, а не поток (типа надежнее, нельзя "завалить сразу все и вся). Или что?
По доке лажу, различия видны, ну там логины различаются, таблицы какие то внутренние, ALTER PROCEDURE не поддерживаются, и прочие мелочи. Чувствую за деревьями не вижу леса. Главное то, концептуальное различие в чем? Не для различий же в синтаксисе его сделали (в Firebird-е для этого диалектами 1,3 обошлись... не трогая сервер...).
...
Рейтинг: 0 / 0
29.06.2011, 22:37
    #37329707
Tesla13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оператор CASE в функциях.
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / Оператор CASE в функциях. / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]