Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle SQL listaggs के साथ यादृच्छिक आउटपुट उत्पन्न करता है

यहाँ एक तरीका है - स्ट्रिंग्स को अर्ध-यादृच्छिक रूप से उत्पन्न करना (ora_hash . का उपयोग करके) चाल करने के लिए), जबकि पूरी तरह से नियतात्मक, प्रतिलिपि प्रस्तुत करने योग्य तरीके से। यदि आप भिन्न (लेकिन समान) परिणाम प्राप्त करना चाहते हैं, तो ora_hash . के लिए तीसरे तर्क का उपयोग करें डिफ़ॉल्ट से भिन्न बीज प्रदान करने के लिए (जो कि 0 है)। अगर आप हर बार अलग परिणाम चाहते हैं, तो dbms_random.value() प्रदान करें बीज के रूप में मूल्य; इसके लिए अभी भी पूरी क्वेरी के लिए केवल एक "यादृच्छिक" मान उत्पन्न करने की आवश्यकता होगी। आप कम या ज्यादा null पाने के लिए अपर बाउंड (मेरे उदाहरण में, 280) के साथ भी खेल सकते हैं (और छोटे बनाम लंबे अल्पविराम से अलग किए गए तार, अधिक सामान्यतः)।

WITH data ( value ) AS (
  SELECT 30 FROM DUAL UNION ALL
  SELECT 31 FROM DUAL UNION ALL
  SELECT 32 FROM DUAL UNION ALL
  SELECT 33 FROM DUAL
),
ids ( id ) AS (
  SELECT LEVEL
  FROM   DUAL
  CONNECT BY LEVEL <= 8
)
select id, 
       ( select listagg(case when ora_hash(id * value, 1000) < 280 
                             then value end, ',')
                        within group(order by value)
         from   data
       ) as vals
from   ids
;

ID VALS           
-- ---------------
 1 33             
 2 32             
 3                
 4 30,32          
 5 30,31          
 6 32             
 7                
 8   


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Amazon Python 2.7 लैम्ब्डा:DPI-1047:64-बिट Oracle क्लाइंट लाइब्रेरी लोड नहीं की जा सकती:libclntsh.so

  2. मैं ऐसे चरित्र का उपयोग करने में सक्षम क्यों हूं जो एक वर्णसेट (विंडोज़-1252) का हिस्सा नहीं है?

  3. Oracle ODBC कनेक्शन के साथ पैरामीटर्स का उपयोग करना

  4. एक एसक्यूएल क्वेरी में तालिका के लिए गतिशील रूप से कॉलम नाम देखें

  5. oracle 10g . में दो संग्रहों के संयोजन पर आंतरिक त्रुटि (00801)