2012-12-21 230 views
3

如何從固定字符集中生成PL/SQL中的隨機字符串?例如: 我想生成一個長度爲10的字母數字字符串,它排除了某些字符和數字,例如I,O,0等。我無法找到一種方法將DBMS_RANDOM.STRING()與必需的設置結合。 PL/SQl中是否有內置的方法來執行此操作?PL/SQL從固定字符集中生成隨機字符串

謝謝。

回答

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