既存のプライマリ・キーのないテーブルの場合

1098 ワード

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 ;