sql >> データベース >  >> RDS >> Oracle

Oracle SQLは、listaggsを使用してランダムな出力を生成します

    これが方法です-文字列を準ランダムに生成します(ora_hashを使用) トリックを行うために)、完全に決定論的で再現可能な方法で。異なる(ただし類似した)結果を取得する場合は、ora_hashの3番目の引数を使用します デフォルト(0)とは異なるシードを提供します。毎回異なる結果が必要な場合は、dbms_random.value()を指定してください シードとしての価値;これでも、クエリ全体に対して1つの「ランダム」値を生成する必要があります。上限(私の例では280)を試して、nullを増減することもできます。 (より一般的には、コンマ区切りの短い文字列と長い文字列)。

    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. ビュー+cakephpでコントローラー変数を使用する方法

    2. Zend_Dbを使用するときに値をNULLに設定する方法

    3. サーバーから応答を受信して​​いません:Java.net.SocketException:recvfrom failed:ECONNRESET

    4. MySQLCLIより400倍長いPDOステートメント