PL/SQLで固定文字セットからランダム文字列を生成するにはどうすればよいですか? 例: I、O、0 などの特定の文字や数字を除外した、長さ 10 の英数字文字列を生成したいのですDBMS_RANDOM.STRING()
が、必要なセットをシードする方法が見つかりませんでした。これを行うための方法が PL/SQl に組み込まれていますか?
ありがとう。
このような関数を自分で作成することもできます。特定の文字セットを受け入れる関数は、それを混ぜ合わせて結果を返します。ここに例があります。この例では、 Oracle 11G R2以降でのみ使用可能なlistagg関数が使用されています。
簡単な関数は次のとおりです。
SQL> create or replace function RandomString(p_Characters varchar2, p_length number)
2 return varchar2
3 is
4 l_res varchar2(256);
5 begin
6 select substr(listagg(substr(p_Characters, level, 1)) within group(order by dbms_random.value), 1, p_length)
7 into l_res
8 from dual
9 connect by level <= length(p_Characters);
10 return l_res;
11 end;
12 /
Function created
そして、これがどのように機能するかです:
SQL> select randomstring('1234567abcdefg', 10) res
2 from dual
3 connect by level <= 10
4 /
RES
----------
caedg54f67
f35eca6gb4
4ae6f1c37b
1c436g7a2b
16e357bd2a
564gca23ef
d57c21bg36
3gd62b4c1e
31ea5cb472
fe152bdga6
10 rows selected