2017-12-23 20 views
0

OracleモードでH2を使用しています。テーブルfooに列barを追加して値を入力しました。今私は戻って列にNOT NULLの制約を与えたい。 ALTER TABLEのためのいくつかのold Oracle docs見れH2は、Oracle構文を使用してNOT NULL制約表の列を追加することをサポートします。

は、私が最初にこれを試してみました:

ALTER TABLE foo ALTER COLUMN bar NOT NULL; 

H2私に語った、Unknown data type: "NOT" …

は、だから私はALTER TABLE構文については、いくつかのmore recent Oracle documentationを見て、これを試してみました:

ALTER TABLE foo MODIFY (bar VARCHAR2(255) NOT NULL); 

(私はタイプを変更する必要はありませんが、生産図はそれが必要だということを示していると思われます。

H2がSyntax error in SQL statement "ALTER TABLE FOO MODIFY ([*]BAR VARCHAR2(255) NOT NULL) " …

は、私がここで間違って何をしているのですか?、私に語ったが、これはH2のOracleモードのバグです、または(可能性が高い)私は構文で決定的な何かが足りないのですか?(私は実際に試していませんオラクで私は、OracleのH2モードでサポートされている基本的なものを考え出しました。)

人は、質問をお読みください!のOracle構文が必要です。はい、H2に対してテストしています。H2がOracle構文をサポートしているかどうかを知りたいからです。あなたが私にH2構文を教えたら、H2がOracle構文をサポートしているかどうかはどのように分かりますか?

+1

H2を使用している場合は、Oracleマニュアルではなく[H2マニュアル](http://h2database.com/html/grammar.html)を参照してください。 「オラクル・モード」は、いくつかの非常に基本的なOracle構文部分をシミュレートします。 H2はOracleのように動作しません –

+0

Oracleと同じように動作します。 OracleモードでOracleに似ていない場合は、OracleモードでOracleのように動作するように、H2を修正するためにチケットを登録したり、リソースを提供したりする必要があります。したがって、問題は、上記のいずれかのSQLコマンドが有効なOracle構文であるかどうかです。私はSQLを使い果たしたので、またはH2がこの構文をサポートしていないので、それらは機能しませんか? (はい、私はH2マニュアルを読んでいますが、正しいOracle構文があるかどうか最初に明確にしたいと思います) –

+0

これは意味をなさないものです。なぜOracleを使用しないのですか? –

答えて

1

正しいsyntax for Oracle 12.2のようになりますクエリ:

ALTER TABLE foo MODIFY (bar VARCHAR2(255) NOT NULL); 

しかし、ステートメントは外側のカッコを使わずにOracleに対して正しく実行されます。これはH2で動作します。私はgithub issue #694を見つけました。これにはpull request #703を修正しました。

+0

これは素晴らしい答えのモデルです!あなたは私に正式な参照を与えて正しい構文を教えてくれました。回避策を提供しました。あなたは将来的に物事を良くするためにH2のプルリクエストを提出しました。あなたは私がやりたいことを本当にやりたかったかどうかについて私と議論していませんでした。あなたは短くて、適切なところにリンクをつけています。私は何を求めることができますか?どうもありがとうございました!!私はこの質問に賞金を加えて、あなたに授与することができます。ハッピーホリデー! –

+0

種類のフィードバックありがとう! –

0

括弧除外してみてください。

ALTER TABLE foo MODIFY bar VARCHAR2(255) NOT NULL; 
+0

https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_3001.htm#SQLRF01001にあるOracleのプロダクションダイアグラムでは、カッコが必要であることを示していませんか? –

2

私は H2を話すことはありませんが、しかし純粋オラクルでは、それはあなたがに記載されているよう

SQL> create table foo (bar varchar2(255)); 

Table created. 

SQL> alter table foo modify bar not null; 

Table altered. 

SQL> 
関連する問題