यहाँ एक तरीका है - स्ट्रिंग्स को अर्ध-यादृच्छिक रूप से उत्पन्न करना (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