Oracle DB:如果第一个查询为空,则返回第二个查询

Nel*_*dez 3 sql-server oracle plsql stored-procedures

我正在编写一个Oracle存储过程来返回数据库查询的结果.如果查询未产生任何结果,则必须在其位置运行第二个查询.

在SQL Server中,我可以使用类似于以下内容的方法来完成此操作:

INSERT INTO @TableVar
SELECT <joinQuery1>;

IF (SELECT COUNT(*) FROM @TableVar) > 0
BEGIN
    SELECT * FROM @TableVar;  -- returns <joinQuery1>
END
ELSE
    SELECT <joinQuery2>;  --returns <joinQuery2>
END
Run Code Online (Sandbox Code Playgroud)

但是,我无法理解如何在Oracle中完成相同的任务.

Cra*_*aig 7

您可以利用WITH来提高性能(并且更易于维护):

WITH query1 as (
    select 1, 2
    from dual
    where 1=0
    connect by level <= 10
),
query2 as (
    select 3, 4
    from dual
    connect by level <= 10
)
select *
from query1
union all
select *
from query2
where not exists (
    select null
    from query1
);
Run Code Online (Sandbox Code Playgroud)

这应该从query2返回10行.如果从query1中删除where 1 = 0(导致它实际返回行),则应从query1获取10行.