Locations of visitors to this page

Friday, February 20, 2009

generate random string - 产生随机字符串

generate random string - 产生随机字符串



提问: 如何产生随机字符串?

回答: 用dbms_random.string(opt, len)

第一个参数表示字符的类型, 可以是:
'u', 'U' - returning string in uppercase alpha characters 产生大写字符
'l', 'L' - returning string in lowercase alpha characters 产生小写字符
'a', 'A' - returning string in mixed case alpha characters 产生大小写混合字符
'x', 'X' - returning string in uppercase alpha-numeric characters 产生大写字母和数字混合字符
'p', 'P' - returning string in any printable characters. 产生所有可打印的字符(ASCII编码从32-126)
Otherwise the returning string is in uppercase alpha characters. 默认产生大写字符

第二个参数是字符串的长度


举例:
生成12到16个字符长度的包含大小写英文字母和数字的字符串
substr(translate(dbms_random.string('P', 1000)
                 ,'A~!@#$%^&*()_+=-`{}|\][:;"''?/>.<, '
                 ,'A')
       ,1,dbms_random.value(12,16+1))
首先生成一堆可显字符, 再删除其它特殊字符, 得到的就只有大小写和数字了
而且生成了1000个字符, 这样保证删除后的字符串长度也能够满足要求(12-16)
删除字符串使用的是translate函数, 比如translate('12345','a32','a')删除字符'2'和'3'


select substr(translate(dbms_random.string('P', 1000)
                        ,'A~!@#$%^&*()_+=-`{}|\][:;"''?/>.<, '
                        ,'A')
              ,1,dbms_random.value(12,16+1))
  from all_objects
 where rownum <= 10;
SQL> select substr(translate(dbms_random.string('P', 1000)
                        ,'A~!@#$%^&*()_+=-`{}|\][:;"''?/>.<, '
                        ,'A')
              ,1,dbms_random.value(12,16+1))
  from all_objects
 where rownum <= 10;
  2    3    4    5    6
SUBSTR(TRANSLATE(DBMS_RANDOM.STRING('P',1000),'A~!@#$%^&*()_+=-`{}|\][:;"''?/>.<,','A'),1,DBMS_RANDOM.VALUE(12,16+1))
--------------------------------------------------------------------------------------------------------------------------------------------
XQzByZYj33KVS
IyjBGqGPbwT0
dZtwIWc7Iw2y
SFMpCzfdsOJnB4
V0lZTKKhjDwbiV
xQr1bUz5FmmHnQv
HLbfMpxwTkTw
p1wij3yRCsBexU1z
UdiXMgPEzrvN8FC
c57XveMzreePm

10 rows selected.

SQL>




产生随机数字:

产生16位随机数字
select to_char(round(dbms_random.value(0,9999999999999999)),'FM0999999999999999') from dual;

select substr(translate(dbms_random.string('X', 1000)
                        ,'-ABCDEFGHIJKLMNOPQRSTUVWXYZ'
                        ,'-')
              ,1,16)
  from dual;





外部连接:
DBMS_RANDOM
ASCII



-fin-

No comments:

Website Analytics

Followers