Oracle:有条件地在WITH子句中运行SELECT

时间:2018-01-03 20:48:43

标签: sql oracle common-table-expression

我们有一个相当冗长的存储过程(Oracle 12),它包含一系列以这种方式相互构建的WITH子句:

WITH temp1 AS (SELECT ... FROM tableA WHERE ...),
WITH temp2 AS (SELECT ... FROM temp1, tableB WHERE ...),
WITH temp3 AS (SELECT ... FROM temp2, tableC WHERE ...),

从temp3实体

完成最后的SELECT
SELECT ... FROM temp3;

这样可行,但最近我们被要求'bookend'最终选择,以便它有一个虚拟的第一行和一个虚拟的最后一行。即如果'temp3'包含三行,那么最终的SELECT将返回5行,包括两个虚拟行。但是,如果temp3不包含任何数据,则两个虚拟行也不应出现,并且用户将返回空记录集。

如果temp3包含数据,我们如何才能进行最终选择,但如果temp3现在有行,则返回空记录集?

1 个答案:

答案 0 :(得分:2)

怎么样:

with temp1 as ( . . . ),
     temp2 as ( . . . ),
     temp3 as ( . . . )
select t
from (select dummyrow1 from dual union all
      select . . . from temp3 union all
      select dummyrow2 from dual
     ) t
where exists (select 1 from temp3);

如果您关心行的排序,那么您应该在最外面的order by中添加select