• ベストアンサー

オラクルでデータベースに項目を追加する場合に

オラクル初心者です教えてください。 バージョンが関係あるのかは分かりませんが、8.1.7です。 AAAテーブルに10個の項目があり、真中に項目を追加する場合に、今入っているデータを生かしたい場合にどうやってやればよいのでしょうか? ↓領域を増やす場合などはこうやっているのですが  項目がずれているので駄目ですよね? CREATE TABLE BBB AS SELECT * FROM AAA DROP TABLE AAA CREATE TABLE AAA(真ん中に項目追加後) INSERT INTO AAA SELECT * FROM BBB やっぱりINSERT分に項目を全部書かないとだめなのでしょうか?

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

かかれているSQL文の中に2個所アスタリスクがありますが、どちらかで項目を並べればいいですよ。 CREATE TABLE BBB AS SELECT F1,F2,NULL,F3 FROM AAA DROP TABLE AAA CREATE TABLE AAA(真ん中に項目追加後) INSERT INTO AAA SELECT * FROM BBB とか、 CREATE TABLE BBB AS SELECT * FROM AAA DROP TABLE AAA CREATE TABLE AAA(真ん中に項目追加後) INSERT INTO AAA SELECT F1, F2, NULL, F3 FROM BBB

Ref16570
質問者

お礼

ご意見ありがとうございます。 テーブルを作成する時に、既に項目を追加すると言うこととですね。 INSERT INTO.....VALUESと書くよりは 手間が省けますね。

その他の回答 (1)

回答No.2

>やっぱりINSERT分に項目を全部書かないとだめなのでしょうか? 違う方法でも項目はすべて書く必要があります。例を書きますので参考にしていただけたらと思います。 追加するフィールドをADD_FIELD VARCHAR2(100)とします。。 /*1.現在のテーブルの最後にフィールドを追加 */ alter table AAA add (ADD_FIELD VARCHAR2(100)); /*2.AAAを基に新規テーブルを作成追加 */ create table BBB as select [Field1],...ADD_FILED,..[Field10] from AAA /*3.BBBをAAAにする */ drop table AAA cascade constraints; rename BBB to AAA; ちなみに2.で必要とされるフィールド名の取得は select COLUMN_NAME from USER_TAB_COLUMNS where TABLE_NAME = 'AAA' で全て取れると思います。

Ref16570
質問者

お礼

ご意見ありがとうございます。 はじめにテーブルを追加して、 コピーする際に順番を変えて変名するんですね。 CASCADE CONSTRAINTS RENAME というコマンドは知りませんでした。 勉強になりました。

関連するQ&A