web-dev-qa-db-ja.com

Oracleのキーワードの後に​​テーブルを変更する

ALTER TABLE testTable ADD column1 NUMBER(1) DEFAULT 0 NOT NULL AFTER column2;

OracleでもmySql構文を使用できないのはなぜですか?上記のコマンドはMySqlで機能します。動作する同等のものを教えていただけますか?


Error report:
SQL Error: ORA-01735: invalid ALTER TABLE option
01735. 00000 -  "invalid ALTER TABLE option"

私が提供したOracleコマンドでafter句を使用する方法があるかどうかを尋ねていますか?

11
radu florescu

SQLは関係代数だからです。テーブル内の「どこ」の列が存在するかどうかは関係ありません。

Oracleで機能させるには、after句を削除するだけです。 alter tableのOracleドキュメントは ここ ですが、要約すると次のようになります。

alter table testTable
    add ( column1 number(1) default 0 not null )

alter tableコマンドにはnoafter句があります。

18
paxdiablo

Oracleは、テーブルの途中に列を追加することをサポートしておらず、最後に列を追加するだけです。データベースの設計とアプリの機能は、データベーススキーマの列の順序に依存しないようにする必要があります。結局のところ、selectステートメントではいつでも順序を指定できます。

ただし、何らかの理由でテーブルの中央に新しい列が必要な場合は、回避策があります。

CREATE TABLE tab1New AS SELECT 0 AS col1, col1 AS col2 FROM tab1;
DROP TABLE tab1 PURGE;
RENAME tan1New to tab1;

どこ SELECT 0 AS col1は新しい列であり、必要に応じて元のテーブルから他の列を指定します。置く SELECT 0 AS col1必要な順序で適切な場所に。

その後、列に対してalter tableステートメントを実行して、それが目的のデータ型であることを確認することができます。

12
Ilion

これを試して :

ALTER TABLE testTable ADD column1 NUMBER(1) DEFAULT 0 NOT NULL
1
DrLazer