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

问题描述 投票:0回答:3

我在Oracle模式下使用H2。我在表bar中添加了一列foo并用值填充它。现在我想回去给列一个NOT NULL约束。

看一下old Oracle docsALTER TABLE,我首先尝试了这个:

ALTER TABLE foo ALTER COLUMN bar NOT NULL;

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

所以我看一些more recent Oracle documentationALTER TABLE语法,并尝试了这个:

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上尝试过它,但我认为在Oracle模式下H2会支持这么基本的东西。)

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

sql oracle h2
3个回答
1
投票

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

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

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


2
投票

我不会说H2,但在纯粹的Oracle中它就像

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

Table created.

SQL> alter table foo modify bar not null;

Table altered.

SQL>

0
投票

试着省略括号:

ALTER TABLE foo MODIFY bar VARCHAR2(255) NOT NULL;
© www.soinside.com 2019 - 2024. All rights reserved.