PL / SQL从固定的字符集生成随机字符串

时间:2012-12-21 20:02:26

标签: oracle plsql

如何从一组固定的字符中生成PL / SQL中的随机字符串?例如: 我想生成一个长度为10的字母数字字符串,它排除某些字符和数字,例如I,O,0等。我找不到使用所需集合种子DBMS_RANDOM.STRING()的方法。 PL / SQl中是否有内置方式来执行此操作?

感谢。

2 个答案:

答案 0 :(得分:7)

您可以自己编写这样的函数 - 接受特定字符集的函数将其混合并返回结果。这是一个例子。在此示例中,使用listagg函数,该函数仅在 Oracle 11G R2 及更高版本中可用。

  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
    

答案 1 :(得分:-1)

根据oracle在线文档,该软件包有一个SEED程序

http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_random.htm#i996798