• ベストアンサー

同じテーブル設計にしたい

CREATE TABLE 見積データ ( 見積番号 VARCHAR2(7) NOT NULL, 得意先コード VARCHAR2(7), CONSTRAINT 見積データ_KEY PRIMARY KEY ( 見積番号 ) ) STORAGE ( INITIAL 3020K NEXT 302K PCTINCREASE 0 ) TABLESPACE KNDN2; ALTER INDEX 見積データ_KEY REBUILD TABLESPACE KEC_IND STORAGE ( INITIAL 19K NEXT 2K PCTINCREASE 0 ); ******** 上記のようなテーブル設計のSQL文がありますが、私が作ったものではなく都合によりこのテーブルを create table A2 as select from A; 上記のようなコピーを行いました。 あたらしいテーブルでも CONSTRAINT 見積データ_KEY PRIMARY KEY ( 見積番号 ) ) STORAGE ( INITIAL 3020K NEXT 302K PCTINCREASE 0 ) TABLESPACE KNDN2; ALTER INDEX 見積データ_KEY REBUILD TABLESPACE KEC_IND STORAGE ( INITIAL 19K NEXT 2K PCTINCREASE 0 ); この制約と同じものを当てたいのですが、あとから追加するにはこの構文をどのように変えればいいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

alter table A2 add constraint 見積データ_KEY primary key (見積番号) using index storage(initial 19k next 2k pctincrease 0) こんな感じかな? create table 文のテーブル名をA2で作ってそれに、 Aテーブルの内容をinsertするって手もありますね。 CREATE TABLE A2( ・・・・ ) insert into A2 select * from A; みたいに。 >ALTER INDEX 見積データ_KEY >REBUILD TABLESPACE KEC_IND >STORAGE ( INITIAL 19K NEXT 2K PCTINCREASE 0 ); これはインデックスの再作成なのでインデックス名を変えればそのまま使えると思います。

KKMM2000
質問者

お礼

問題解決しました。 ありがとうございました。

その他の回答 (1)

  • shangzi
  • ベストアンサー率47% (17/36)
回答No.2

>create table A2 as select from A; でテーブルは作成されたのですね。 プライマリーキーを付与するのであれば、 CONSTRAINT 見積データ_KEY --ここの名前を変えて下さい例えば見積データ2_KEYとかに >STORAGE ( INITIAL 3020K NEXT 302K PCTINCREASE 0 ) >TABLESPACE KNDN2; >ALTER INDEX 見積データ_KEY >REBUILD TABLESPACE KEC_IND >STORAGE ( INITIAL 19K NEXT 2K PCTINCREASE 0 ); ここでは、最初に作ったプライマリーキーから、ALTER文で使用する領域が変更されているので、新規作成する場合は、変更後ので作ればいい訳です。 よって、こうなります。 >create table A2 as select from A; --これはもう作られているので問題ないです。 CONSTRAINT 見積データ2_KEY PRIMARY KEY ( 見積番号 ) )  REBUILD TABLESPACE KEC_IND STORAGE ( INITIAL 19K NEXT 2K PCTINCREASE 0 );

関連するQ&A