2012-01-19 3 views
10
ALTER TABLE testTable ADD column1 NUMBER(1) DEFAULT 0 NOT NULL AFTER column2; 

OracleでmySql構文も使用できないのはなぜですか?上記のコマンドは、MySqlで動作します。あなたは私に同等のものを与えることができますか?Oracleでキーワードの後に​​テーブルを変更する


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

私が提供するOracleのコマンドに句の後に使用するためにどのような方法がある場合、私は求めていますか?

+2

あなたはcorrent構文を求めているのですか、なぜそれを求めるのですか? – cctan

+3

"OracleでmySql構文を使用できないのはなぜですか?"私の知る限りでは。 MySQLには非常に特殊なSQL構文がいくつかあります。ほとんどすべてのデータベースベンダーは、SQL標準に近い構文を持っていますが、SQL標準は実装していません。彼らはかなり異なっています。 –

+0

@cctan:あなたの質問への回答として編集2を追加しました –

答えて

18

SQLはリレーショナル代数なので、テーブル内に「どこ」の列が存在しているかについてだけは気にしません。

Oracleで動作させるには、after節を削除してください。 alter tableについては、Oracleのマニュアルはhereですが、それはつまるところ:alter tableコマンドにはafter句がありません

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

+0

です。テーブル –

+7

@ Floradu88を再作成せずにその句を使用できるようにしたい場合は、私たちではありません。私はそれほどラリーに近いわけではない:-) – paxdiablo

+0

それでできないの? –

1

はこれを試してみてください:

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

Oracleは唯一の最後に追加し、テーブルの真ん中に列を追加サポートしていません。データベース設計とアプリケーション機能は、データベーススキーマの列の順序に依存してはいけません。結局、selectステートメントではいつでもorderを指定することができます。

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

SELECT 0 AS col1があなたの新しい列です
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を必要な順番で適切な場所に置いてください。

その後、列に対してalter table文を実行して、必要なデータ型であることを確認することができます。

関連する問題