H2 Oracle对RENAME列语句的兼容性

H2 Oracle对RENAME列语句的兼容性,oracle,h2,Oracle,H2,我将Oracle用于生产,并将H2用作内存中的测试数据库。我在“重命名列”语句的Oracle兼容性方面遇到问题 具体而言,Oracle声明是: 将表“SOME_table”的列“column_A”重命名为“column_B” 我正在使用Spring和Liquibase来设置测试环境,我相信我已经正确指定了“使用Oracle兼容模式”,但H2拒绝了这一说法,如下所示: 原因:org.h2.jdbc.JdbcSQLException:SQL语句中的语法错误 "ALTER TABLE ""SOME_T

我将Oracle用于生产,并将H2用作内存中的测试数据库。我在“重命名列”语句的Oracle兼容性方面遇到问题

具体而言,Oracle声明是:

将表“SOME_table”的列“column_A”重命名为“column_B”

我正在使用Spring和Liquibase来设置测试环境,我相信我已经正确指定了“使用Oracle兼容模式”,但H2拒绝了这一说法,如下所示:

原因:org.h2.jdbc.JdbcSQLException:SQL语句中的语法错误

"ALTER TABLE ""SOME_TABLE"" RENAME COLUMN[*] ""COLUMN_A"" TO ""COLUMN_B"" "; expected "TO"; SQL statement:
alter table "SOME_TABLE" rename column "COLUMN_A" to "COLUMN_B" [42001-174]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:332)
    at org.h2.message.DbException.getSyntaxError(DbException.java:197)
    at org.h2.command.Parser.getSyntaxError(Parser.java:504)
    at org.h2.command.Parser.read(Parser.java:2867)
    at org.h2.command.Parser.parseAlterTable(Parser.java:4971)
    at org.h2.command.Parser.parseAlter(Parser.java:4412)
    at org.h2.command.Parser.parsePrepared(Parser.java:316)
    at org.h2.command.Parser.parse(Parser.java:289)
    at org.h2.command.Parser.parse(Parser.java:265)
    at org.h2.command.Parser.prepareCommand(Parser.java:226)
    at org.h2.engine.Session.prepareLocal(Session.java:437)
    at org.h2.engine.Session.prepareCommand(Session.java:380)
    at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1138)
    at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:168)
    at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:156)
    at   liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:294)
我通过研究发现,目前H2可能无法实现这种级别的兼容性。在Oracle和H2中,我是否可以编写任何扩展或采取任何其他操作来重命名列

谢谢!
Steve Nester是另一个很好的例子,为什么针对不同的DBMS进行测试不是一个好主意。但是如果您使用的是Liquibase,那么为什么不使用
标记呢?它可以处理不同的DBMS,我是Liquibase的新手,可以修改现有的脚本——在我们的repo中还没有这样的xml文件。但是谢谢,我会研究一些重构。现在,我只是删除旧列并重新创建新列,这在本用例中很好。谢谢你提供的信息。如果你知道你的目标是多个数据库管理系统,你应该使用Liquibase的XML格式,因为它至少给你一些抽象层,你只需要一个变更。谢谢-我会查一下-听起来是一个更好的解决方案。