从 Flyway 调用 Oracle 程序
Posted
技术标签:
【中文标题】从 Flyway 调用 Oracle 程序【英文标题】:Call Oracle procedure from Flyway 【发布时间】:2012-11-29 04:54:09 【问题描述】:我在 Java 应用程序中使用 Maven 3、FlyWay 和 Oracle。我正在尝试从我的 sql 脚本调用 Oracle 过程。
文件名为V1.0.0__test.sql
,内容为:
execute pkg_test.pr_do_task('TEST_VALUE');
格式是否正确?我只在运行时遇到一般错误
mvn -P DEV clean compile flyway:migrate
这是:
[错误] 无法在项目 bambi-ex 上执行目标 com.googlecode.flyway:flyway-maven-plugin:2.0.3:migrate (default-cli) man-sql:Flyway 错误:com.googlecode.flyway.core.api.FlywayException:迁移到版本 4.0.0 失败!请恢复 备份和回滚数据库和代码! -> [帮助 1] org.apache.maven.lifecycle.LifecycleExecutionException: 未能执行目标 com.googlecode.flyway:flyway-maven-plugin :2.0.3:migrate (default-cli) on project bambi-exman-sql: Flyway Error: com.googlecode.flyway.core.api.FlywayException: M 迁移到 4.0.0 版本失败!请恢复备份并回滚数据库和代码! 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 在 org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 在 org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 在 org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) 在 org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 在 org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 在 org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 在 org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 在 org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 在 org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) 在 org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 引起:org.apache.maven.plugin.MojoExecutionException:Flyway 错误:com.googlecode.flyway.core.api.FlywayException: 迁移到版本 4.0.0 失败!请恢复备份并回滚数据库和代码! 在 com.googlecode.flyway.maven.AbstractFlywayMojo.execute(AbstractFlywayMojo.java:200) 在 org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) ... 19 更多 原因:com.googlecode.flyway.core.api.FlywayException:迁移到4.0.0版本失败!请恢复备份和 回滚数据库和代码! 在 com.googlecode.flyway.core.migration.DbMigrator.migrate(DbMigrator.java:186) 在 com.googlecode.flyway.core.Flyway$1.execute(Flyway.java:856) 在 com.googlecode.flyway.core.Flyway$1.execute(Flyway.java:820) 在 com.googlecode.flyway.core.Flyway.execute(Flyway.java:1259) 在 com.googlecode.flyway.core.Flyway.migrate(Flyway.java:820) 在 com.googlecode.flyway.maven.MigrateMojo.doExecuteWithMigrationConfig(MigrateMojo.java:159) 在 com.googlecode.flyway.maven.AbstractMigrationLoadingMojo.doExecute(AbstractMigrationLoadingMojo.java:162) 在 com.googlecode.flyway.maven.AbstractFlywayMojo.execute(AbstractFlywayMojo.java:191) ... 21 更多我似乎无法获得完整的堆栈跟踪。
谢谢
【问题讨论】:
【参考方案1】:Try this,
begin
pkg_test.pr_do_task('TEST_VALUE');
end;
/
【讨论】:
"/" 在 flyway 中不起作用,它是 SQLPLUS 客户端独有的功能,它会出错【参考方案2】:这种情况下的错误报告绝对可以而且应该改进。请在问题跟踪器中提交增强请求。
【讨论】:
以上是关于从 Flyway 调用 Oracle 程序的主要内容,如果未能解决你的问题,请参考以下文章
Flyway 修复使用 Oracle DB 引发 FlywaySqlException