вернуть строку по умолчанию в sql - PullRequest
5 голосов
/ 12 ноября 2009

Возможно ли в oracle sql вернуть строку по умолчанию, если строки не найдены. У меня есть процесс, в котором извлеченные строки будут помещены в плоский файл ASCII. теперь у меня есть требование, что если в запросе sql нет строк, выбранных в файле ascii, должна быть строка по умолчанию.

возможно ли в sql выводить строку по умолчанию, если в запросе нет строк примечание: я не хочу использовать pl / sql.

Ответы [ 4 ]

6 голосов
/ 12 ноября 2009

Для сложных запросов, когда накладные расходы на выяснение наличия строки в наборе результатов обременительны или запрос очень большой и громоздкий, тогда может быть полезно условие факторинга подзапроса:

With my_query as
    (
    select a, b, c from foobar where foo='FOO' 
    )
Select a,b,c
From   my_query
Union All
Select ...
From   dual
Where  Not Exists
       (Select 1 from my_query)
/
6 голосов
/ 12 ноября 2009

Вы можете использовать UNION ALL для этого:

select a, b, c from foobar 
where foo='FOO'
union all
select 'def', 'ault', 'value' from dual 
where not exists ( select 'x' from foobar where foo='FOO' )
2 голосов
/ 12 ноября 2009

Я подозреваю, что было бы чище, если бы процесс записи файла ASCII записывал данные по умолчанию, если строки не возвращаются, вместо того, чтобы заставить Oracle это сделать. Если используемый вами запрос является дорогостоящим, вы бы значительно увеличили эту стоимость, если бы вы выделили его, чтобы вернуть строку по умолчанию, как это сделали ammoQ и David Oniell.

1 голос
/ 04 мая 2015

Есть еще один (грустный, витой) вариант. Нет необходимости в CTE или повторении подзапроса.

select
  coalesce(a, 'def'),
  coalesce(b, 'ault'),
  coalesce(c, 'value')
from foobar
right join (select 1 from dual) on 1=1
where foobar.some_condition;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...