我使用 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)
Run Code Online (Sandbox Code Playgroud)
我通过研究发现,此时 H2 可能无法实现这种级别的兼容性。是否有我可以编写的任何扩展或我可以采取的任何其他操作来重命名 Oracle 和 H2 中的列。
谢谢!史蒂夫·内斯特