Du kan använda WITH för att få detta att fungera bättre (och lättare att underhålla):
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
);
Som är detta bör returnera de 10 raderna från query2. Om du tar bort where 1=0 från query1 (som gör att den faktiskt returnerar rader), bör du få de 10 raderna från query1.