powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / decode & case
5 сообщений из 5, страница 1 из 1
decode & case
    #38985445
Фотография George-III
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select 
      decode(1,0,'нет',1,'да','неизвестно') as var1,
case 
    when 1=0 then 'нет'
    else
      case 
          when 1=1 then 'да'
      else 'неизвестно'
      end
    end as var2
from
    dual;



Насколько оправдан приоритет использования case против decode?
Мои аргументы:
1. CASE более нагляден, так как смотрится более привычно после процедурных языков программирования;
2. CASE более универсален, так как такая конструкция есть и в других серверах БД (с небольшими ).

Недостатки:
1. CASE громоздкий, больше букв - больше вероятность ошибиться;
...
Рейтинг: 0 / 0
decode & case
    #38985469
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё более нагляден IF-THEN-ELSEIF-ELSE

Код: sql
1.
2.
3.
4.
IF     1=0 THEN 'нет'
ELSEIF 1=1 THEN 'да'
ELSE            'неизвестно'
END IF
...
Рейтинг: 0 / 0
decode & case
    #38985472
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
George-IIIНедостатки:
1. CASE громоздкий, больше букв - больше вероятность ошибиться;
Ага... а в DECODE (при его-то количестве параметров) обос ошибиться совершенно невозможно... особенно если не записывать структурированно-многострочно - а тру-программисты на такое, как известно, не заморачиваюццо...
...
Рейтинг: 0 / 0
decode & case
    #38985482
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё одно (я не спец в ораклах) - во всех документациях и примерах искомое значение decode(1, 0 ,'нет', 1 ,'да','неизвестно') всегда задаётся как литерал. Если это и вправду ограничение, и невозможно в качестве искомого задать произвольное вычисляемое выражение - то DECODE место на свалке.
Впрочем, DECODE (как и precalculated CASE) не позволяет выполнять гетерогенные сравнения... например типа такого

Код: sql
1.
2.
3.
4.
IF     a.date='2015-06-01'  THEN 'нет'
ELSEIF a.name LIKE 'Админ%' THEN 'да'
ELSE                        'неизвестно'
END IF
...
Рейтинг: 0 / 0
decode & case
    #38985491
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно как-то case используется.
Всегда было так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select 
    case
    when 1=0 then 'нет'
    when 1=1 then 'да'
    else 'неизвестно'
    end as var1,

    case myfield
    when 0 then 'нет'
    when 1 then 'да'
    else 'неизвестно'
    end as var2

from
    dual;
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / decode & case
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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