对付已存在的无主键的表

1. 复制表,删除表数据,如果数量大,可以rownum<2


create skype_sms_BAK  table AS SELECT * FROM skype_sms 
delete from skype_sms_BAK


我们将在备份表上进行增加主键的操作

2. 增加一个普通字段


alter table skype_sms_BAK add SKYPE_SMS_ID varchar2(50);


--此时由于表没有数据,所以可以直接alter主键


alter table skype_sms_BAK 
  add constraint PK primary key (SKYPE_SMS_ID);

3.拷贝所有原表的数据+上一个新增的id字段到bak表中,在这里,id选择的oracle自带的uuid


insert into skype_sms_bak select t.*  ,(select sys_guid() as skype_sms_id from dual ) from skype_sms t

4.删除原有表,再把bak表复制为原表

create skype_sms   table AS SELECT * FROM skype_sms_bak

5.由于原本的表就没有主键,所以原始的程序代码插入的时候肯定是没有主键生成策略的,为了让更改最小话,这里使用触发器完成主键策略.

create or replace trigger skype_sms_trigger       
before insert on skype_sms
for each row       
begin       
select sys_guid()  into :new.skype_sms_id from dual;      
end ;



你可能感兴趣的:(对付已存在的无主键的表)