#oracle #plsql
#Oracle #plsql
Вопрос:
Когда запись не найдена, я хочу вернуть значение по умолчанию, например N/A
. Я пытался DECODE
NVL
и NVL2
пытался, но все равно ничего не получилось. Мой фактический запрос намного сложнее, просто публикую упрощенную версию
SELECT DECODE(test_date,NULL,'N/A', test_date) test_date FROM Table1 WHERE name = 'Unknown'
Комментарии:
1. Просто используйте
nvl(min(test_date) ,'N/A')
2. это дало мне ошибку «нечисловой символ найден там, где ожидалось числовое значение».
3. Ах, я понимаю: вы не можете вернуть строку в столбец с
date
типом данных. Поэтому вам нужно либо преобразоватьmin(test_date)
в строку с помощью to_char, либо использовать что-то другое вместо «N/A»
Ответ №1:
Поведение по умолчанию заключается в том, что, когда строки не найдены, ничего не отображается. Чтобы обойти это, вы можете сделать следующее: ОБЪЕДИНИТЬ исходный выбор с другим выбором, который возвращает что-то, если исходный выбор не содержит строк. На таблице emp это было бы примерно так (нет пользователя «xKING»):
SELECT ename FROM emp WHERE ename = 'xKING' UNION SELECT 'N/A' FROM DUAL WHERE NOT EXISTS (SELECT ename FROM emp WHERE ename = 'xKING') ;
Функции, такие как NVL
и DECODE
преобразуют столбцы результатов — если результата нет, они не могут быть использованы.