Oracle10g以降限定だけど
16*16の乱数表を吐くSQLを書いてみた。
SELECT TO_CHAR(MAX(X) KEEP (DENSE_RANK FIRST ORDER BY Y), 'FM0X') "0", TO_CHAR(MAX(X) KEEP (DENSE_RANK FIRST ORDER BY MOD(Y+1,16)), 'FM0X') "1", TO_CHAR(MAX(X) KEEP (DENSE_RANK FIRST ORDER BY MOD(Y+2,16)), 'FM0X') "2", TO_CHAR(MAX(X) KEEP (DENSE_RANK FIRST ORDER BY MOD(Y+3,16)), 'FM0X') "3", TO_CHAR(MAX(X) KEEP (DENSE_RANK FIRST ORDER BY MOD(Y+4,16)), 'FM0X') "4", TO_CHAR(MAX(X) KEEP (DENSE_RANK FIRST ORDER BY MOD(Y+5,16)), 'FM0X') "5", TO_CHAR(MAX(X) KEEP (DENSE_RANK FIRST ORDER BY MOD(Y+6,16)), 'FM0X') "6", TO_CHAR(MAX(X) KEEP (DENSE_RANK FIRST ORDER BY MOD(Y+7,16)), 'FM0X') "7", TO_CHAR(MAX(X) KEEP (DENSE_RANK FIRST ORDER BY MOD(Y+8,16)), 'FM0X') "8", TO_CHAR(MAX(X) KEEP (DENSE_RANK FIRST ORDER BY MOD(Y+9,16)), 'FM0X') "9", TO_CHAR(MAX(X) KEEP (DENSE_RANK FIRST ORDER BY MOD(Y+10,16)), 'FM0X') "A", TO_CHAR(MAX(X) KEEP (DENSE_RANK FIRST ORDER BY MOD(Y+11,16)), 'FM0X') "B", TO_CHAR(MAX(X) KEEP (DENSE_RANK FIRST ORDER BY MOD(Y+12,16)), 'FM0X') "C", TO_CHAR(MAX(X) KEEP (DENSE_RANK FIRST ORDER BY MOD(Y+13,16)), 'FM0X') "D", TO_CHAR(MAX(X) KEEP (DENSE_RANK FIRST ORDER BY MOD(Y+14,16)), 'FM0X') "E", TO_CHAR(MAX(X) KEEP (DENSE_RANK FIRST ORDER BY MOD(Y+15,16)), 'FM0X') "F" FROM(SELECT Rownum-1 AS X, Row_number() OVER (ORDER BY dbms_random.random)-1 AS Y FROM DUAL CONNECT BY LEVEL <= 256) GROUP BY TRUNC(Y/16)
そのまま実行すると毎回違う表を出力。
毎回同じ値を出力したければdbms_randomパッケージで乱数の種を設定する必要あり。