oracle 随机生成12位不重复数据,求高手写个存储过程。高分!!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 随机生成12位不重复数据,求高手写个存储过程。高分!!!相关的知识,希望对你有一定的参考价值。

我以前生成的随机数 存在在表 code_table_01,字段为code.(数据如:
541662025362)
现在我想写一个过程如
create or replace procedure insert_random_Code(maxNum in number)
传入的参数为 想要生成随机数的条数,比如1W条
过程的功能就是 生成XX条不重复且不在code_table_01表内的12位随机数,存放咋code_table_02

参考技术A create or replace procedure insert_random_Code(maxNum in number)
as
v_code number;
v_count number;
i number;
begin
i:=0;
for i in 0..maxNum-1 loop
select trunc(dbms_random.value(100000000000,1000000000000)) into v_code from dual;
select count(*) into v_count from code_table_01 where code=v_code;
if v_count=0 then
select count(*) into v_count from code_table_02 where code=v_code;
if v_count=0 then
insert into code_table_02(code)values(v_code);
i:=i+1;
end if;
end if;
end loop;
if i=maxNum then
commit;
elsif
roolback;
end if;
end;

求推荐 求采纳 求赞追问

谢谢你的回答,很有帮助。但是我还有个问题

select trunc(dbms_random.value(100000000000,1000000000000)) into v_code from dual;

这个应该限制为 1-1000000000000.不足12位的前面用0补充。这个怎么实现呢

追答

create or replace procedure insert_random_Code(maxNum in number)
as
v_code varchar2(20);
v_count number;
i number;
begin
i:=0;
for i in 0..maxNum-1 loop
select lpad(trunc(dbms_random.value(1,1000000000000)),12,'0') into v_code from dual;
select count(*) into v_count from code_table_01 where code=v_code;
if v_count=0 then
select count(*) into v_count from code_table_02 where code=v_code;
if v_count=0 then
insert into code_table_02(code)values(v_code);
i:=i+1;
end if;
end if;
end loop;
if i=maxNum then
commit;
elsif
roolback;
end if;
end;

追问

大神 为什么我 编译不能通过呢。我给你2个表的语句,你帮我调试下呢

create table CODE_TABLE_02
(
CODE VARCHAR2(12)
)
create table CODE_TABLE_01
(
CODE VARCHAR2(12)
)

追答

呵呵 不好意思哈;有2个地方有点问题,一时rollback写错;二是改成while循环
下面是新的代码:
create or replace procedure insert_random_Code(maxNum in number)
as
v_code varchar2(20);
v_count number;
i number;
-- n number;
begin
i:=0;
while i<=maxNum-1 loop
select lpad(trunc(dbms_random.value(1,1000000000000)),12,'0') into v_code from dual;
select count(*) into v_count from code_table_01 where code=v_code;
if v_count=0 then
select count(*) into v_count from code_table_02 where code=v_code;
if v_count=0 then
insert into code_table_02(code)values(v_code);
i:=i+1;
end if;
end if;
end loop;

if i=maxNum then
commit;
else
rollback;
end if;
end;

本回答被提问者采纳
参考技术B create proc pro_key
as
SELECT dbms_random.value('u',12) FROM dual;

java随机生成6位不重复的字符串

代码如下:

public String getlinkNo() 
    String linkNo = "";
    // 用字符数组的方式随机
    String model = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    char[] m = model.toCharArray();
    for (int j = 0; j < 6; j++) 
        char c = m[(int) (Math.random() * 36)];
        // 保证六位随机数之间没有重复的
        if (linkNo.contains(String.valueOf(c))) 
            j--;
            continue;
        
        linkNo = linkNo + c;
    
    return linkNo;

以上是关于oracle 随机生成12位不重复数据,求高手写个存储过程。高分!!!的主要内容,如果未能解决你的问题,请参考以下文章

java随机生成6位不重复的字符串

java随机生成6位不重复的字符串

用Python或者Java如何生成多位数字不重复的数

生成一个四位数的随机验证码

给oracle当主键,随机生成32位字符串,求代码

求PHP语言随机自动生成不重复的数字