用oracle中的dbms_random生成指定长度的无重复的字符串

create or replace function GetRandStr
(
  iLength  number, --字符串的长度
  isRepeat char --字符串是否可以重复:0--不可以;1--可以
) return varchar is
  i        number(10);
  iRandom  number(10);
  sResult  varchar2(100) := '';
  seedMode varchar2(10) := '0123456789';
begin
  if (iLength > 10 and isRepeat = '0')
  then
    return '';
  end if;
  if (isRepeat = '1')
  then
    --方法一: 利用系统中dbms_random.value 产生(只支持到38位)
    --sResult := substr(dbms_random.value,3,iLength);
   
    --方法二:
    for i in 1 .. iLength
    loop
      iRandom := trunc(dbms_random.value(1, lengthb(seedMode) + 1));
      sResult := sResult || substr(seedMode, iRandom, 1);
    end loop;
  end if;
  if (isRepeat = '0')
  then
    for i in 1 .. iLength
    loop
      --产生随机数,用于获取seedMode字符串的随机位置
      iRandom  := trunc(dbms_random.value(1, lengthb(seedMode) + 1));
      --获取该位置的字符,加入到sResult 结果中
      sResult  := sResult || substr(seedMode, iRandom, 1);
      --将该位置中的字符从seedMode中删除
      seedMode := substr(seedMode, 1, iRandom - 1) ||
                  substr(seedMode, iRandom + 1, lengthb(seedMode));
    end loop;
  end if;
  return sResult;
end; 

 

--测试
declare
str varchar2(40);
begin
--生成无重复的字符串
select GetRandStr(10,'0') into str from dual;
dbms_output.put_line(str);
--生成可以重复的字符串
select GetRandStr(10,'1') into str from dual;
dbms_output.put_line(str);
end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值