首页 > 解决方案 > Oracle 和 H2 数字数据类型不兼容

问题描述

我将 Flyway 用于我的 Spring Boot 应用程序(使用 Oracle DB)。我有一个新脚本,它将创建一个带有数字字段的表,例如:

CREATE TABLE ENGINEER (
    ...
    SALARY NUMBER(*, 2),
    ...
);

我想用 H2 数据库调试应用程序,它将运行脚本。H2 文档说 NUMBER(precision, scale) 是一种有效的数据类型,但它似乎不支持 * 作为 Oracle 的精度。所以我不能用H2调试它,当我运行脚本时不能成功运行:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-08-21 18:19:47.026 ERROR 25932 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.command.DbMigrate$FlywayMigrateException: 
Migration <file-name>.sql failed
-------------------------------------------
SQL State  : 42001
Error Code : 42001
Message    : Syntax error in SQL statement "                                                        
                       
                                                        
CREATE TABLE ENGINEER(
    ...
    SALARY NUMBER(*, 2),
    ...
)"; expected "long"; SQL statement:

CREATE TABLE ENGINEER(
    ...
    SALARY NUMBER(*, 2),
    ...
) [42001-200]
Location   : sql/db/migration/v04/<file-name>.sql 
Line       : 1

有什么办法可以让我可以保留上面的迁移脚本,但仍然可以随时使用 H2 进行调试?

谢谢

标签: springoracleh2flywayin-memory-database

解决方案


推荐阅读