随机生成唯一的7位数字,作为用户的唯一标识 20C

0-9之间的数字,随机生成一个7位数,保存入数据库,此数据不能和以前的数据重复,唯一性

26个回答

可以使用java或者是其他的编程生成随机的数字,选择对这个数字操作不就行了

每次你还得判断一下是不是重复值,累么?
7位的数字可以用随机数,不够就填0,每次判断ID是否与之前的重复,不重复就获取,重复就再生出一次。

利用java的uuid自动生成

建议使用uuid加时间戳,这样比较保险。

可以用new Date().getTiem(),仅供参考,这样也不会重复,如果想截取,也可以自行截取操作。

用随机函数和一个数组标记就行,定义一个10^7大小的bool数组,初始化为false,标记之前是否出现过此随机数,随机产生一个七位数num,并进行判断,如果没出现过就把bool[num]值赋为true,出现过就再生成一次,直到产生之前没出现过的数。

直接数据库写函数,loop和end loop 之间通过 trim(to_char(trunc(dbms_random.value*10000000),'0999999'))获得随机七位数,
然后去目标表查询,如果目标表不存在对应的编号则退出循环,把随机结果返回(A表示目标表,NO表示目标字段)
create or replace function get_NO
return varchar2 is
Result varchar2(100);
v_exists number;--是否存在

--错误信息
v_errmessage varchar2(3000);
begin
loop
Result := trim(to_char(trunc(dbms_random.value*10000000),'0999999'));
select count(1) into v_exists from A t
where t.NO = Result;

   if (v_exists = 0) then
     exit;--退出循环
   end if;

end loop;
return(Result);
exception
when others then
v_errmessage := SQLERRM;
dbms_output.put_line(v_errmessage);
Result := '';
return (Result);
end get_NO;

楼上有几位说的时间戳的方法貌似也不行的,时间戳加上去的话超出了七位数字,如果取时间戳的一部分,那么还是会重复的

生成的随机数作为主键,就避免了重复。

Oracle数据库的话建议可以用序列sequence,设置一个1000000位最小值,9999999位上限,你数据量小,够你用了,

共26条数据 首页 2 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问