如何使用sql批量生成不重复的有规则数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用sql批量生成不重复的有规则数据?相关的知识,希望对你有一定的参考价值。

如何使用sql批量生成不重复的有规则数据?
例如存在表test:

create table code_test
( IID VARCHAR2(100),
NAME VARCHAR2(200),
CODE VARCHAR2(100)
)
存在数据:

insert into code_test values ('1','1','code-0001');
/
insert into code_test values ('2','2','code-0004');
/
insert into code_test values ('3','3','code-0007');
/
insert into code_test values ('4','4','code-0003');
/
insert into code_test values ('5','5','');
/
insert into code_test values ('6','6','');
/
insert into code_test values ('7','7','');
/
insert into code_test values ('8','8','');
/
insert into code_test values ('9','9','');
/
其中iid字段唯一,code字段的规则是:“code-”+流水号。现在想要使用sql对code为空的字段生成code,其规则是:与已存在的code字段不重复。
自己的思路:取得最大的流水号007,在此基础上往上加生成code-0008,code-0009.。。。。
请问如何实现?能不能不用存储过程,使用一条sql语句实现?

参考技术A 可以用存储过程,也可以在程序中实现。添加数据的时候取得最大值,然后递增1追问

请给个详细的程序呗

参考技术B update code_test t set t.code = 'code-00' || 序列.nextval where t.code is null;
序列最小值从10开始吧,呵呵。追问

update code_test t set t.code = 'code-00'||10.nextval where t.code is null;执行不通过啊

追答

汗,你先要建个sequence。

追问

sql不太会啊。。。给个详细的程序呗。。。谢谢啦

参考技术C create or replace procedure pro_code(in_iid number)
as
maxcode number(4,0);
begin
select max( right(code,4)) from code_test into maxcode from code_test;
maxcode = maxcode + 1;
create sequence seq2
start with maxcode
increment by 1
maxvalue 99999
cycle
update code_test set code = 'code-'|| ltrim(to_char(seq2.nextval,'0000')) where iid = in_iid
end;本回答被提问者采纳
参考技术D 视规则而定

MySQL 批量插入,如何不插入重复数据?