थोड़ा अलग दृष्टिकोण लेना लेकिन यह काम करता प्रतीत होता है। आवरण और गिनती करने के बजाय, बस जांचें कि क्या कुल शून्य है (एक श्रृंखला में पहला गैर-शून्य मान देता है) और यदि यह आपके संदेश को प्रतिस्थापित करता है। यह एक दूसरे स्तर के समूह से बचा जाता है जो मुझे विश्वास नहीं है कि इसकी आवश्यकता है।
बहुत खराब listagg समुच्चय के भीतर भी विशिष्ट का समर्थन नहीं करता है; हम इनलाइन दृश्य से बच सकते हैं।
SELECT coalesce(listagg(A.osuser, ', ') within group (order by A.osuser),
'There are no users connected') as userList
FROM (select distinct osuser from v$session) A
WHERE A.osuser!= 'SYSTEM' and A.osuser not like 'VMCONFTEST%'
इसमें ओवरहेड है कि यह उन उपयोगकर्ताओं की एक सूची उत्पन्न करने का प्रयास करता है जो आपका केस स्टेटमेंट शॉर्ट सर्किट करने का प्रयास कर रहा हो सकता है। हालांकि अगर V$session में कोई रिकॉर्ड नहीं है तो चुनिंदा डिफरेंट जल्दी होना चाहिए।
हालांकि ईमानदार होने के लिए मुझे यकीन नहीं है कि हमें ऐसा करने की आवश्यकता क्यों है। सूची में शून्य आम तौर पर एक पर्याप्त प्रतिक्रिया है जो कोई उपयोगकर्ता नहीं दर्शाता है। और UI नल का अर्थ कोई उपयोगकर्ता नहीं संभालेगा।
और भी तेज़ हो सकता है अगर हम इनलाइन व्यू के लिए जहां क्लॉज को और बढ़ा दें..
SELECT coalesce(listagg(A.osuser, ', ') within group (order by A.osuser),
'There are no users connected') as userList
FROM (SELECT distinct osuser
FROM v$session
WHERE A.osuser!= 'SYSTEM'
and A.osuser not like 'VMCONFTEST%') A