Oracle Developer👨🏻‍💻
3.22K subscribers
614 photos
68 videos
2 files
492 links
🔝 канал о разработке в СУБД Oracle:
SQL, PL/SQL, оптимизация, архитектура и многое другое...

Backend-pro.ru - обучение по различным программам, связанных с backend-разработкой для ФЛ и ЮЛ.

Отец-основатель: @denis_dbd Кивилёв Денис
Download Telegram
Задача: постановка в посте вторника.

Решение:
Вспомним для чего нужна функция NVL. Если первый аргумент null, то возвращается второй аргумент.
На примере: nvl(null, 2), результатом будет “2”.

Тогда какой правильный ответ в задаче?
Первый аргумент возвращает “1” - не null. Значит запрос выполнится за 5 секунд?

К сожалению, нет. Не важно какое значение в первом аргументе (null, не null), второй аргумент будет вычисляться всегда. Это допустимо, когда это просто литерал (как в примере выше). Но если это что-то вычисляемое или получение значение из сиквенса, то мы столкнемся с сайд-эффектами. В документации, явно об этом не написано.

Возвращаясь к нашей задачи. 5 секунд будет потрачено при вычислении первого аргумента и 10 секунд для второго. Итого: 15 секунд.

Как с этим бороться? Использовать альтернативные функции. Например, COALESCE.
О ней я расскажу более подробно в следующих постах.

#решениезадачи #функции #nvl #coalesce
Задача: постановка в посте вторника.

Решение:
Функцию COALESCE я упомянул еще на прошлой недели в качестве альтернативы NVL. Однако, опрос вторника немного удивляет 😉

Основные отличия от NVL

1️⃣ Функция может принимать более двух аргументов.

2️⃣ Используется короткозамкнутое вычисление (short-circuit evaluation), т.е. аргументы вычисляются по мере надобности.

3️⃣ В coalesce все аргументы должны быть одного типа. NVL - неявно преобразует тип второго аргумента к первому. Есть особенности, см. доку ⚠️

4️⃣ Функция относится к ANSI SQL, может быть использована в других РСУБД. NVL - чисто Оракловая поделка.

5️⃣ Отличия в выполнении запросов.

Согласно п.2. правильный ответ: 5 секунд.
Функция не будет вычислять ни второй, ни третий аргументы, т.к. первый аргумент не null.

Дополнительная задачка на подумать: выполнится или нет?
select nvl(10, 'abc') from dual;


В новом году, можно начать изучать PL/SQL с опытным наставником. Переходите на темную сторону 😈

#решениезадачи #функции #nvl #coalesce
👍6