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

qq78292959 阅读:39 2024-10-01 17:34:08 评论:0

如何从一组固定的字符在 PL/SQL 中生成随机字符串?例如:
我想生成一个长度为 10 的字母数字字符串,其中不包括某些字符和数字,例如 I、O、0 等。我找不到种子 DBMS_RANDOM.STRING() 的方法。与所需的集合。 PL/SQl 中是否有内置的方法来做到这一点?

谢谢。

请您参考如下方法:

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

  • 这是简单的函数:
    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 
    

  • 标签:oracle
    声明

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    关注我们

    一个IT知识分享的公众号