Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle SQL tạo đầu ra ngẫu nhiên với các thẻ danh sách

Đây là một cách - tạo các chuỗi gần như ngẫu nhiên (sử dụng ora_hash để thực hiện thủ thuật), trong khi theo một cách hoàn toàn xác định, có thể tái tạo. Nếu bạn muốn nhận được các kết quả khác nhau (nhưng tương tự), hãy sử dụng đối số thứ ba cho ora_hash để cung cấp một hạt giống khác với mặc định (là 0). Nếu bạn muốn các kết quả khác nhau mọi lúc, hãy cung cấp dbms_random.value() giá trị như hạt giống; điều này sẽ vẫn chỉ yêu cầu một giá trị "ngẫu nhiên" được tạo cho toàn bộ truy vấn. Bạn cũng có thể chơi với giới hạn trên (trong ví dụ của tôi là 280) để nhận được nhiều hơn hoặc ít hơn null (và các chuỗi ngắn hơn so với các chuỗi được phân tách bằng dấu phẩy dài hơn, nói chung hơn).

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. cx_Oracle và mô hình nguồn dữ liệu

  2. Hiệu suất kém khi nhận trường tắc nghẽn từ Oracle trong .Net

  3. Oracle SQL - Tính tổng và nhóm dữ liệu theo tuần

  4. Cách trừ số năm khỏi ngày tháng

  5. Ora 12154 lỗi