?
【背景】
在由源端抽取数据插入目标端后,需要创建一个主键ID字段。
?
【解决】
方法一、使用sys_guid()函数生成32位的随记数
例如向emp表中,新建一个字段,并且设置字段默认值为用sys_guid()函数自动生成一个32位不重复的随机数。
alter table EMP add ID varchar2(32) default sys_guid();
?
方法二、使用触发器每插入一条自动递增序列
例如每次向emp1表新插入一条数据之前,先插入一个ID值。其中seq_idadd是事先已经创建的序列,可以自行定义该序列的起始值、方差值等。
create or replace trigger tr_IDADD
before insert on emp1
for each row
begin
select seq_idadd.nextval into :new.id from dual;
end;
?
方法三、拼接
例如某ID主键是通过源端业务字段的拼接形成的,例如:
来源ID号||to_char(sysdate, 'yyyymmdd')||lpad(NEXTNUM.Nextval,10,0)
我们假设来源ID号为12位的话,这样就截取了一个12+8+10=30位的主键编号。
?
【实验】
使用sys_guid获取ID值,如下:

通过触发器,每新增一条数据,ID以1递增,如下:

?
通过拼接获得主键ID,如下:

小知识,简而记之。