Как по-прежнему возвращать значение по умолчанию, если запись не найдена

#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 преобразуют столбцы результатов — если результата нет, они не могут быть использованы.