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

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



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

DECODE ( expr , when_expr , then_expr, else_expr);

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

Код: 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
Функция DECODE возвращает неправильное значение
    #37849426
Фотография Daugava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
victor16На 11.70FC4 все работает.

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

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

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


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

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

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


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