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