プロが教えるわが家の防犯対策術!

オラクル初心者です教えてください。
バージョンが関係あるのかは分かりませんが、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分に項目を全部書かないとだめなのでしょうか?

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/09/07 12:51

>やっぱり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' で全て取れると思います。
    • good
    • 0
この回答へのお礼

ご意見ありがとうございます。
はじめにテーブルを追加して、
コピーする際に順番を変えて変名するんですね。

CASCADE CONSTRAINTS
RENAME
というコマンドは知りませんでした。
勉強になりました。

お礼日時:2003/09/07 12:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す