3

PL/SQLで固定文字セットからランダム文字列を生成するにはどうすればよいですか? 例: I、O、0 などの特定の文字や数字を除外した、長さ 10 の英数字文字列を生成したいのですDBMS_RANDOM.STRING()が、必要なセットをシードする方法が見つかりませんでした。これを行うための方法が PL/SQl に組み込まれていますか?

ありがとう。

4

2 に答える 2

7

このような関数を自分で作成することもできます。特定の文字セットを受け入れる関数は、それを混ぜ合わせて結果を返します。ここに例があります。この例では、 Oracle 11G R2以降でのみ使用可能なlistagg関数が使用されています。

  1. 簡単な関数は次のとおりです。

    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
    
  2. そして、これがどのように機能するかです:

    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
    
于 2012-12-31T19:56:52.930 に答える