返回sql中的默认行
在oracle sql中,如果找不到行,是否可以返回默认行。 我有一个过程,在这个过程中,取回的行将放在一个简单的ascii文件中。 现在我有一个要求,如果sql查询没有获取行,那么ascii文件中应该有一个默认行 在sql中,如果查询没有获取行,是否可以输出默认行返回sql中的默认行,sql,oracle,unix,Sql,Oracle,Unix,在oracle sql中,如果找不到行,是否可以返回默认行。 我有一个过程,在这个过程中,取回的行将放在一个简单的ascii文件中。 现在我有一个要求,如果sql查询没有获取行,那么ascii文件中应该有一个默认行 在sql中,如果查询没有获取行,是否可以输出默认行 注意:我不想使用pl/sql。您可以使用UNION ALL来实现以下目的: select a, b, c from foobar where foo='FOO' union all select 'def', 'ault', 'v
注意:我不想使用pl/sql。您可以使用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' )
我怀疑,如果没有返回行,那么让写入ASCII文件的进程写入默认数据,而不是让Oracle这样做,会更干净。如果您正在使用的查询很昂贵,那么如果您像ammoQ和David Oniell所做的那样伪造它以返回默认行,则会显著增加该成本。对于复杂的查询,查找结果集中是否有行的开销是繁重的,或者查询非常大且笨拙,那么子查询factoring子句可能是有益的:
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)
/
还有另一个选择(悲伤、扭曲)。不需要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;
很好,我以前从未见过,如果我的查询使用组表达式呢?如何在第五行使用它们?什么是“dual”?@AlbertoAcuña“dual”是Oracle特有的一种奇怪的约定,表示从中选择常量的虚拟表。