Гость
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / Функция DECODE возвращает неправильное значение / 12 сообщений из 12, страница 1 из 1
21.06.2012, 18:15
    #37849037
Юрий Р.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция DECODE возвращает неправильное значение
Имеется фрагмент запроса на обновление:

Код: sql
1.
UPDATE table1 SET field1 = (SELECT DECODE(field2, NULL, 'unknown', field2) FROM table2...) WHERE...



Если field2 = NULL почему-то возвращается NULL, а не 'unknown'.
В чем может быть дело?
...
Рейтинг: 0 / 0
21.06.2012, 19:09
    #37849134
olleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция DECODE возвращает неправильное значение
IBM Informix Guide to SQL: Syntax

DECODE ( expr , when_expr , then_expr, else_expr);

Value of when_expr cannot be a NULL.
...
Рейтинг: 0 / 0
21.06.2012, 19:12
    #37849142
olleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция DECODE возвращает неправильное значение
Вместо
DECODE(field2, NULL, 'unknown', field2)
попробуй
NVL(field2,'unknown')
...
Рейтинг: 0 / 0
21.06.2012, 20:01
    #37849215
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция DECODE возвращает неправильное значение
Юрий Р.Имеется фрагмент запроса на обновление:

Код: sql
1.
UPDATE table1 SET field1 = (SELECT DECODE(field2, NULL, 'unknown', field2) FROM table2...) WHERE...



Если field2 = NULL почему-то возвращается NULL, а не 'unknown'.
В чем может быть дело?

На 11.70FC4 все работает.

Код: plsql
1.
2.
3.
4.
create temp table table2(field2 char(10));
insert into table2 values ("known");
insert into table2 values (null);
SELECT DECODE(field2, NULL, 'unknown', field2) FROM table2;


Результат:
Код: plaintext
1.
2.
3.
(expression)
known
unknown
...
Рейтинг: 0 / 0
21.06.2012, 23:59
    #37849426
Daugava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция DECODE возвращает неправильное значение
victor16На 11.70FC4 все работает.

+1 за 10.00.UC6
хотя для конкретно этой задачи действительно NVL разумнее
...
Рейтинг: 0 / 0
22.06.2012, 00:12
    #37849439
Юрий Р.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция DECODE возвращает неправильное значение
Пробовал с NVL - та же история. Может действительно в версии дело?
...
Рейтинг: 0 / 0
22.06.2012, 00:14
    #37849440
Юрий Р.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция DECODE возвращает неправильное значение
Пробовал с NVL - та же история. Может действительно в версии дело?
...
Рейтинг: 0 / 0
22.06.2012, 01:11
    #37849483
Daugava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция DECODE возвращает неправильное значение
Юрий Р.,

проверь простой пример от victor16. Функции могут быть и не виноваты.
...
Рейтинг: 0 / 0
22.06.2012, 11:59
    #37850000
Юрий Р.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция DECODE возвращает неправильное значение
Daugava,

Проверил. Пример от victor16 действительно работает (низкий ему поклон).
Затем стал анализировать весь запрос и в результате получается, что простой подзапрос вида:
Код: sql
1.
SELECT NVL(field1, 'unknown') FROM table1 WHERE field2 = N;


возвращает неизвестно что, если в таблице нет поля field2 со значением N.
Как я понимаю функции NVL, DECODE здесь неприменимы.
Тогда подскажите, пожалуйста, как быть? Как отловить эту ситуацию?
...
Рейтинг: 0 / 0
22.06.2012, 12:32
    #37850077
olleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция DECODE возвращает неправильное значение
Как это неизвестно, что он возвращает?
Он возвращает NULL.
Попробуй так:
Код: sql
1.
NVL(SELECT field1 FROM table1 WHERE field2 = N), 'unknown')
...
Рейтинг: 0 / 0
22.06.2012, 12:34
    #37850084
olleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция DECODE возвращает неправильное значение
Извините, скобку забыл (
Код: plsql
1.
NVL((SELECT field1 FROM table1 WHERE field2 = N), 'unknown')
...
Рейтинг: 0 / 0
22.06.2012, 12:53
    #37850129
Юрий Р.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция DECODE возвращает неправильное значение
olleg,

Огромное СПАСИБО!
Ваш вариант применения NVL заработал!

Также благодарю всех, кто проявил участие.
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / Функция DECODE возвращает неправильное значение / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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