提问: 如何产生随机字符串?
回答: 用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:
Post a Comment