H2支持使用Oracle语法添加NOT NULL约束表列

时间:2017-12-23 18:18:06

标签: sql oracle h2

我在Oracle模式下使用H2。我在表bar中添加了一列foo,并用值填充了它。现在我想返回并为列提供NOT NULL约束。

查看ALTER TABLE的某些old Oracle docs,我首先尝试了这个:

ALTER TABLE foo ALTER COLUMN bar NOT NULL;

H2告诉我,Unknown data type: "NOT" …

所以我看一些ALTER TABLE ALTER TABLE foo MODIFY (bar VARCHAR2(255) NOT NULL); 语法,并尝试了这个:

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

(请注意,我不需要更改类型,但生产图表似乎表明需要更改。

H2告诉我,Create PrimaryEntityUserA.java Pojo and its hbm file PrimaryEntityUserA.hbm.xml Mention `<class name="PrimaryEntityUserA" table="user_a" entity-name ="PrimaryEntityUserA" >`

我在这里做错了什么?这是H2的Oracle模式中的错误,还是(更有可能)我错过了一些对语法至关重要的东西? (我实际上并没有在Oracle上尝试过它,但我认为在Oracle模式下H2会支持这么基本的东西。)

人们,请阅读问题!我想要 Oracle 语法。是的,我正在对H2进行测试,因为我想知道H2是否支持Oracle语法!如果您只是告诉我H2语法,那么我怎么知道H2是否支持Oracle语法?

3 个答案:

答案 0 :(得分:2)

我不 H2,但在 Oracle中它就像

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

Table created.

SQL> alter table foo modify bar not null;

Table altered.

SQL>

答案 1 :(得分:1)

正确的syntax for Oracle 12.2如您在查询中所述:

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

然而,该语句将在没有外部括号的情况下针对Oracle正确执行,这也适用于H2,这将允许您继续。我找到了github issue #694我为其添加pull request #703并修复了此内容。

答案 2 :(得分:0)

尝试省略括号:

{{1}}