我在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语法?
答案 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}}