Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle SQL menghasilkan output acak dengan listaggs

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   


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menghasilkan sisipan sql ke untuk Oracle

  2. Tampilkan file pdf yang disimpan di disk lokal dengan di Oracle Forms 6i

  3. flyway clean tidak menjatuhkan pekerjaan atau program penjadwal

  4. Oracle:Akses baca-saja ke skema untuk pengguna lain?

  5. Perbedaan antara klausa ON dan WHERE dalam tabel SQL bergabung