gpt4 book ai didi

java - H2数据库和oracle模式-alter table only with different sql statement - Flyway迁移测试

转载 作者:行者123 更新时间:2023-11-30 10:21:33 34 4
gpt4 key购买 nike

设置

我们使用 Flyway 进行数据迁移,并希望使用 JUnit 测试我们的 SQL 脚本。

  • 目标(生产)环境在 oracle 上运行,而
  • 开发者机器运行一个h2数据库(版本:1.4.196)

大多数脚本运行良好,但似乎某些 SQL 语句不适用于 h2 和 Oracle

  • 当前 Oracle:alter table mytable modify (status not null);
  • 正确的 h2:alter table mytable ALTER COLUMN status SET NOT NULL

如果我在我的 h2 数据库上本地运行此 oracle 样式,我会遇到以下异常:SQL 语句“ALTER TABLE MYTABLE MODIFY ([*]STATUS NOT NULL)”中的语法错误;预期的“标识符”;语句:
alter table mytable 修改(状态不为空)[42001-196]

我尝试了什么

根据 http://www.h2database.com/html/features.html#compatibility我已经为 oracle 模式配置了 h2 数据库:url: jdbc:h2:mem:test;DB_CLOSE_ON_EXIT=FALSE;MODE=Oracle

问题

  • 有什么方法可以让 Oracle 语句在 h2 数据库上运行吗?
  • 或者这个SQL alter语句是否属于h2网站提到的这个案例?

    and tries to be compatible with other databases

更新

我提交了一个 github 问题并了解到该问题将在下一个 h2 数据库版本中得到解决:https://github.com/h2database/h2database/issues/689

最佳答案

因为您只修改表的一列,所以您可以像这样编写 ALTER TABLE 语句

ALTER TABLE mytable 
MODIFY status VARCHAR2(50) NOT NULL;

此示例假定列 status 数据类型是 VARCHAR2(50)。请确保您在 ALTER TABLE 语句中使用数据类型。您应该使用 status 列的当前数据类型,除非您也想迁移该数据类型。

此外,它不使用 (...),这是 Oracle 特定的快捷方式,用于更改同一表的多个列。

alter table
table_name
modify
(
column1_name column1_datatype,
column2_name column2_datatype,
column3_name column3_datatype,
column4_name column4_datatype
);

关于java - H2数据库和oracle模式-alter table only with different sql statement - Flyway迁移测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47796297/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com