首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单的Flyway示例失败,返回ORA-00911无效字符

简单的Flyway示例失败,返回ORA-00911无效字符
EN

Stack Overflow用户
提问于 2015-06-13 00:47:46
回答 1查看 1.1K关注 0票数 0

我正在用一个简单的例子尝试Flyway,但不知何故陷入了一个我不理解的错误。这只是一个"hello world“类型的项目。

此迁移脚本失败,如此处所述,但如果我删除末尾的";“,或者将列default更改为”N“以外的任何值,则迁移脚本会成功。小写的'n‘也失败。

我已经使用十六进制编辑器确认一切都是ascii,并且可以在Toad和SQuirreL中成功运行迁移脚本。只有在通过Flyway时才会失败。

我还使用调试器在Flyway执行之前捕获了Flyway中的SQL字符串,在那里看起来也不错。将其从调试器复制到Toad或SQuirreL也成功。

一定是我遗漏了一些简单的东西,但我看不出是什么。有什么想法吗?

这是我唯一的迁移脚本:

代码语言:javascript
复制
CREATE TABLE APP_USER
(
  USER_ID        INTEGER NOT NULL,
  USER_CONFIRMED CHAR(1) DEFAULT 'N'
);

和代码:

代码语言:javascript
复制
import javax.sql.DataSource;
import oracle.jdbc.pool.OracleDataSource;
import org.flywaydb.core.Flyway;

public class FlywayTask {

    public static void main(String[] args) {
        FlywayTask flywayTask = new FlywayTask();
        try {
            flywayTask.run();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void run() {

        System.out.println("FlywayTask Running!");

        // Create Flyway instance w/ a datasource
        Flyway flyway = new Flyway();
        flyway.setDataSource(buildDS());

        // Delete the WHOLE SCHEMA!! DANGER!!
        flyway.clean();

        // Start the migration
        flyway.migrate();
    }

    public DataSource buildDS() {
        ...
        return ods;
    }
}

对Oracle 10g或11g运行此命令会导致以下错误:

代码语言:javascript
复制
FlywayTask Running!
Jun 12, 2015 10:38:40 AM org.flywaydb.core.internal.util.VersionPrinter printVersion
INFO: Flyway 3.2 by Boxfuse
Jun 12, 2015 10:38:41 AM org.flywaydb.core.internal.dbsupport.DbSupportFactory createDbSupport
INFO: Database: jdbc:oracle:thin:@(DESCRIPTION=   (ADDRESS=(PROTOCOL=TCP)(HOST=scan-dev-db.dev.probuild.com )(PORT=1525))    (CONNECT_DATA =        (SERVER = DEDICATED)        (SERVICE_NAME=NTRADEV.dev.probuild.com))) (Oracle 11.2)
Jun 12, 2015 10:38:42 AM org.flywaydb.core.internal.command.DbClean cleanSchema
INFO: Cleaned schema "TOM1" (execution time 00:00.686s)
Jun 12, 2015 10:38:42 AM org.flywaydb.core.internal.command.DbValidate validate
INFO: Validated 1 migration (execution time 00:00.016s)
Jun 12, 2015 10:38:42 AM org.flywaydb.core.internal.metadatatable.MetaDataTableImpl createIfNotExists
INFO: Creating Metadata table: "TOM1"."schema_version"
Jun 12, 2015 10:38:43 AM org.flywaydb.core.internal.command.DbMigrate migrate
INFO: Current version of schema "TOM1": << Empty Schema >>
Jun 12, 2015 10:38:43 AM org.flywaydb.core.internal.command.DbMigrate applyMigration
INFO: Migrating schema "TOM1" to version 1 - Tables
Jun 12, 2015 10:38:43 AM org.flywaydb.core.internal.command.DbMigrate applyMigration
SEVERE: Migration of schema "TOM1" to version 1 failed! Please restore backups and roll back database and code!
org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException: 
Migration V1__Tables.sql failed
-------------------------------
SQL State  : 22019
Error Code : 911
Message    : ORA-00911: invalid character
Location   : db/migration/V1__Tables.sql (C:\Workspaces\luna_64\flyway-spike\target\classes\db\migration\V1__Tables.sql)
Line       : 3
Statement  : CREATE TABLE APP_USER
(
  USER_ID        INTEGER NOT NULL,
  USER_CONFIRMED CHAR(1) DEFAULT 'N'
);

    at org.flywaydb.core.internal.dbsupport.SqlScript.execute(SqlScript.java:117)
    at org.flywaydb.core.internal.resolver.sql.SqlMigrationExecutor.execute(SqlMigrationExecutor.java:71)
    at org.flywaydb.core.internal.command.DbMigrate$5.doInTransaction(DbMigrate.java:284)
    at org.flywaydb.core.internal.command.DbMigrate$5.doInTransaction(DbMigrate.java:282)
    at org.flywaydb.core.internal.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:72)
    at org.flywaydb.core.internal.command.DbMigrate.applyMigration(DbMigrate.java:282)
    at org.flywaydb.core.internal.command.DbMigrate.access$800(DbMigrate.java:46)
    at org.flywaydb.core.internal.command.DbMigrate$2.doInTransaction(DbMigrate.java:207)
    at org.flywaydb.core.internal.command.DbMigrate$2.doInTransaction(DbMigrate.java:156)
    at org.flywaydb.core.internal.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:72)
    at org.flywaydb.core.internal.command.DbMigrate.migrate(DbMigrate.java:156)
    at org.flywaydb.core.Flyway$1.execute(Flyway.java:1059)
    at org.flywaydb.core.Flyway$1.execute(Flyway.java:1006)
    at org.flywaydb.core.Flyway.execute(Flyway.java:1418)
    at org.flywaydb.core.Flyway.migrate(Flyway.java:1006)
    at com.probuild.spike.flyway.FlywayTask.run(FlywayTask.java:34)
    at com.probuild.spike.flyway.FlywayTask.main(FlywayTask.java:16)
Caused by: java.sql.SQLSyntaxErrorException: ORA-00911: invalid character

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:837)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:445)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:523)
    at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:193)
    at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:999)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1315)
    at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1890)
    at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1855)
    at oracle.jdbc.driver.OracleStatementWrapper.execute(OracleStatementWrapper.java:304)
    at org.flywaydb.core.internal.dbsupport.JdbcTemplate.executeStatement(JdbcTemplate.java:238)
    at org.flywaydb.core.internal.dbsupport.SqlScript.execute(SqlScript.java:114)
    ... 16 more
EN

回答 1

Stack Overflow用户

发布于 2015-11-02 20:50:43

这是已知的Flyway的bug。它已经修复了,但它将在Flyway 4.0中发布。看一看issue 1080

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30808293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档