既存のプライマリ・キーのないテーブルの場合
1098 ワード
1.テーブルをコピーし、テーブルデータを削除し、数が多い場合はrownum<2
バックアップ・テーブルでプライマリ・キーを追加する操作を行います.
2.一般フィールドを追加
--この場合、テーブルにデータがないため、直接alterプライマリ・キーを使用できます.
3.すべての元のテーブルのデータをコピー+前の新しいidフィールドをbakテーブルにコピーします.ここで、id選択oracleが持参したuuid
4.元のテーブルを削除し、bakテーブルを元のテーブルにコピーする
5.元のテーブルにはプライマリ・キーがないため、元のプログラム・コードを挿入する際にプライマリ・キー生成ポリシーがないに違いないが、変更を最小限に抑えるために、ここではトリガを用いてプライマリ・キー・ポリシーを完了する.
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 ;