Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle SQL generuje losowe dane wyjściowe za pomocą listyggs

Oto sposób - generowanie ciągów quasi-losowo (za pomocą ora_hash załatwić sprawę), a jednocześnie w doskonale deterministyczny, powtarzalny sposób. Jeśli chcesz uzyskać różne (ale podobne) wyniki, użyj trzeciego argumentu ora_hash aby zapewnić ziarno inne niż domyślne (czyli 0). Jeśli chcesz za każdym razem uzyskać inne wyniki, podaj dbms_random.value() wartość jako ziarno; to nadal będzie wymagało wygenerowania tylko jednej „losowej” wartości dla całego zapytania. Możesz także grać z górną granicą (w moim przykładzie 280), aby uzyskać więcej lub mniej null (i ogólniej krótsze i dłuższe ciągi oddzielone przecinkami).

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. jak wyeksportować dane z tabeli logów do treści wiadomości e-mail w Oracle

  2. Wyciąg Oracle XMLTYPE na podstawie wartości i warunku

  3. błąd Oracle pl/sql DBMS_LOCK

  4. Proces aktualizacji krok po kroku dla aktualizacji R12.2 część -4 (stosowanie pakietu aktualizacji wersji 12.2.x)

  5. Nazwa już używana przez istniejący obiekt w VBA