2009-11-12 4 views
5

행이 발견되지 않으면 oracle sql에서 기본 행을 반환 할 수 있습니까? 나는 페치 된 행에있는 플랫 ASCII 파일에 넣을 수있는 프로세스가 있습니다. 이제 SQL 쿼리에 의해 반입 된 행이 없으면 ascii 파일에 기본 행이 있어야한다는 요구 사항이 있습니다.SQL에서 기본 행을 반환하십시오.

쿼리에서 행을 가져 오지 않으면 sql에서 기본 행을 출력 할 수 있습니다. 참고 : pl/sql을 사용하고 싶지 않습니다.

답변

6

당신은 모든이에 대한 UNION을 사용할 수

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') 
+0

우수한 answer.thanks 좋은 – Vijay

2

를 내가 더 행에 오라클을 얻기보다는 반환하는 경우 쓰기는 ASCII 파일이 기본 데이터를 기록하는 과정을 가지고 청소기 될 것이라고 생각 해. 사용하는 쿼리가 비싸다면 ammoQ 및 David Oniell이 수행 한 것처럼 기본 행을 반환하도록 퍼지하는 경우 해당 비용을 상당히 높일 수 있습니다. 복잡한 쿼리에 대한

6

결과 세트의 행이 있는지 알아 내기에 오버 헤드가 부담 또는 쿼리가 단지 매우 크고 다루기 힘든이고, 다음 하위 쿼리 인수 분해 절은 도움이 될 수 있습니다

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) 
/
+0

ammoQ, 나는 본 적이 그 my_query 그룹 식을 사용하는 경우는 어떻게 절 – ninesided

+1

일 전에? 5 행에서 어떻게 사용합니까? –

+0

와 대한 – zygimantus

1

또 다른 (슬프고 꼬인) 옵션이 있습니다. 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; 
+0

'이중'이란 무엇입니까? –

+0

@ AlbertoAcuña "dual"은 상수를 선택하는 가상 테이블을 나타내는 Oracle 고유의 이상한 규칙입니다. – Reinderien

관련 문제