Berikut adalah cara - menghasilkan string kuasi-acak (menggunakan ora_hash
untuk melakukan trik), sementara dengan cara yang sangat deterministik dan dapat direproduksi. Jika Anda ingin mendapatkan hasil yang berbeda (tetapi serupa), gunakan argumen ketiga ke ora_hash
untuk menyediakan benih yang berbeda dari default (yaitu 0). Jika Anda menginginkan hasil yang berbeda setiap saat, berikan dbms_random.value()
nilai sebagai benih; ini masih memerlukan hanya satu nilai "acak" yang akan dihasilkan untuk seluruh kueri. Anda juga dapat bermain dengan batas atas (dalam contoh saya, 280) untuk mendapatkan lebih banyak atau lebih sedikit null
(dan string yang dipisahkan koma lebih pendek vs. yang lebih panjang, lebih umum).
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