- ベストアンサー
オラクルでデータベースに項目を追加する場合に
オラクル初心者です教えてください。 バージョンが関係あるのかは分かりませんが、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分に項目を全部書かないとだめなのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
かかれている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
その他の回答 (1)
- kazuho_goo
- ベストアンサー率56% (34/60)
>やっぱり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' で全て取れると思います。
お礼
ご意見ありがとうございます。 はじめにテーブルを追加して、 コピーする際に順番を変えて変名するんですね。 CASCADE CONSTRAINTS RENAME というコマンドは知りませんでした。 勉強になりました。
お礼
ご意見ありがとうございます。 テーブルを作成する時に、既に項目を追加すると言うこととですね。 INSERT INTO.....VALUESと書くよりは 手間が省けますね。