【问题标题】:Flyway 7.7.3 seems to ignore my "callback"Flyway 7.7.3 似乎忽略了我的“回调”
【发布时间】:2021-07-04 18:03:54
【问题描述】:

我正在从 Flyway 5.4 升级到 7.7.3 并遇到了一些问题。

 flyway -teams -url=jdbc:oracle:thin:@localhost:1521/XE "-user=xxx as SYSDBA" -password=xxx -table=flyway_schema_history_app -encoding=utf-8 -baselineOnMigrate=true migrate

(我有团队版许可证)

Flyway 给我以下错误信息:

** 错误:无法解析 /flyway/sql/incremental/Build_302_Baseline/V302_106__fosprd_INSERT_Master_eg_pocqueue.sql 第 117 行第 1 行中的语句。有关更多信息,请参阅https://flywaydb.org/documentation/knownparserlimitations:没有为变量替换提供值:&R。检查您的配置。如果这不是要替换的 SQLPLus 变量(例如,在字符串文字中),那么您需要事先在脚本中添加 SET DEFINE OFF。 原因:没有为变量替换提供值:&R。检查您的配置。如果这不是要替换的 SQLPLus 变量(例如,在字符串文字中),那么您需要事先在脚本中添加 SET DEFINE OFF。 **

这是由 SQL 语句中的特殊字符“&”引起的,但是,我已确保 SQL 文件使用 UTF-8 编码以及 Unix 返回 (LF)。

另外,我的回调如下:

bash-5.0$ pwd
/flyway/sql/callbacks
bash-5.0$ ls
afterBaseline.sql       afterEachUndo.sql       afterMigrateError.sql   afterUndo.sql           beforeEachUndo.sql
afterBaselineError.sql  afterEachUndoError.sql  afterRepair.sql         afterUndoError.sql      beforeMigrate.sql
afterEachMigrate.sql    afterMigrate.sql        afterRepairError.sql    beforeEachMigrate.sql   beforeUndo.sql

这曾经可以毫无问题地在 5.4 上运行。但是它在 7.7.3 上给了我这个错误,任何人都可以指出正确的方向吗?

谢谢

【问题讨论】:

  • 只是添加到@madninja 的答案中,字符串文字中是否包含与符号?如果没有,您能否提供(编辑的)SQL sn-p?

标签: flyway


【解决方案1】:

这是由于 flyway 的 SQLPlus 支持版本之间的变化以及您拥有的团队许可证的胖。

如消息中所示,这与 SQLPlus 的变量替换有关: https://flywaydb.org/documentation/database/oracle#variable-substitution

如果您没有使用 SQLPlus 功能,您可以尝试禁用它们: https://flywaydb.org/documentation/configuration/parameters/oracleSqlPlus 但推荐的解决方案是将 SET DEFINE OFF 放在 SQL 脚本中的违规与符号之前(可以选择在之后恢复)

【讨论】:

    猜你喜欢
    • 2011-01-26
    • 2016-11-11
    • 2021-10-28
    • 2016-09-30
    • 2016-03-16
    • 2014-02-03
    • 2012-03-11
    • 2013-09-07
    • 2016-08-12
    相关资源
    最近更新 更多