Можете да използвате 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
);
Както е, това трябва да върне 10-те реда от query2. Ако премахнете where 1=0 от query1 (което го кара действително да връща редове), трябва да получите 10-те реда от query1.