2009-11-12 4 views
5

में एक डिफ़ॉल्ट पंक्ति लौटाएं यदि कोई पंक्ति नहीं मिली तो क्या यह डिफ़ॉल्ट पंक्ति को वापस करने के लिए ऑरैकल एसक्यूएल में संभव है। मेरे पास एक प्रक्रिया है जहां लाई गई पंक्तियों में एक फ्लैट एसीआईआई फ़ाइल में रखा जाएगा। अब मुझे एक आवश्यकता है कि यदि SQL क्वेरी द्वारा कोई पंक्ति नहीं लाती है तो एएससीआई फ़ाइल में एक डिफ़ॉल्ट पंक्ति होनी चाहिए।एसक्यूएल

क्वेरी नोट द्वारा प्राप्त कोई पंक्ति नहीं होने पर एसक्यूएल में डिफ़ॉल्ट पंक्ति आउटपुट करना संभव है: मैं pl/sql का उपयोग नहीं करना चाहता हूं।

उत्तर

6

आप सभी इस बात के लिए यूनिअन इस्तेमाल कर सकते हैं:

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 फ़ाइल डिफ़ॉल्ट डेटा लिखने यदि कोई भी पंक्ति को ओरेकल हो रही के बजाय वापस आ रहे हैं के लिए क्लीनर होगा कर दो। यदि आप जिस क्वेरी का उपयोग कर रहे हैं वह महंगा है, तो आप उस लागत में काफी वृद्धि करेंगे यदि आप इसे एमएमक्यू और डेविड ओनिएल के रूप में एक डिफ़ॉल्ट पंक्ति वापस करने के लिए परेशान करते हैं।

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, मैं कभी नहीं देखा है कि – ninesided

+1

+1 खंड –

+0

क्या होगा अगर my_query समूह अभिव्यक्ति का उपयोग करती साथ के लिए पहले? 5 वीं पंक्ति में उनका उपयोग कैसे करें? – zygimantus

1

एक और (उदास, मुड़) विकल्प है। कोई सीटीई या सबक्वायरी पुनरावृत्ति की आवश्यकता नहीं है।

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

@ अल्बर्टो अकुना "दोहरी" एक अजीब सम्मेलन है जो ओरेकल के लिए एक आभासी तालिका का प्रतिनिधित्व करता है, जिससे स्थिरांक का चयन किया जाता है। – Reinderien