【问题标题】:Flyway on Sybase ASE results in Invalid colum name error when there are double quotes in the SQL Statement当 SQL 语句中有双引号时,Sybase ASE 上的 Flyway 导致 Invalid column name 错误
【发布时间】:2020-04-17 23:57:26
【问题描述】:

当 SQL 语句中有双引号时,Sybase ASE 上的 flyway migrate 命令返回错误。

Migration R__wes.sql failed
---------------------------
SQL State  : 42S22
Error Code : 207
Message    : Invalid column name 'C'.
Statement  : SELECT count(1) from redemptions WHERE redem_type = "C"

我在 linux 上使用 Flyway 6.3.3 并尝试使用 jConnect 和 jTDS 驱动程序。

简单的解决方案是将双引号替换为单引号。 但是,我有数百个复杂的存储过程需要更新,以便它们可以与 flyway 一起使用。

我错过了什么可以解决这个问题吗?

谢谢, 卫斯理

【问题讨论】:

  • 需要用单引号替换。如果这里有某种使用模式,也许有人可以建议一个通用的替代解决方案。
  • 我从您的评论中假设 - 我有数百个复杂的存储过程 - 您已经使用双引号值成功运行这些 proc 一段时间了。 . 并且 Flyway 在您的环境中是“新的”,是吗?无论如何,在 ASE 中,如果您发出 set quoted_identifier on(在会话级别),那么您应该能够使用双引号值。我猜你在 Flyway 之前使用的是什么,有一个配置设置可以确保在连接时发出set quoted_identifier on; Flyway 在启动数据库连接时是否有类似的配置/设置?
  • 马克 - 你的假设是正确的。存储的过程已经在数据库中。 Flyway 将用于将未来的更改迁移到现有的存储过程。
  • Mark - flyway 在迁移之前有回调,我可以将quoted_identifier 设置为关闭。这似乎可以解决问题。之前会进行更多测试。我也发现了这个:github.com/flyway/flyway/issues/1355
  • 啊,是的,我误读了这个问题……set quoted_identifer off(不是on)是正确的设置;无论如何,听起来你已经解决了这个问题......进入下一个:-)

标签: flyway sap-ase


【解决方案1】:

在马克的建议下,我能够通过添加来解决这个问题

set quoted_identifier off 在 beforeMigrate.sql(flyway 回调)中禁用 sybase 将字符串视为标识符

http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc00801.1510/html/iqrefso/X315903.htm

谢谢大家!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 2018-05-09
    • 2013-06-23
    相关资源
    最近更新 更多