【问题标题】:Can I string-build a Slick plain SQL query?我可以对 Slick 纯 SQL 查询进行字符串构建吗?
【发布时间】:2018-02-25 22:54:39
【问题描述】:

我正在使用 Slick 组装一个普通的 SQL 查询。

我希望 查询的一部分在运行时以不同的方式构造,具体取决于局部变量。

这意味着我需要连接多个部分SqlActions(我认为?)。

我了解另一种方法是使用#${plainSqlString},但这需要我手动将我的参数转换为文字(例如,$delta 到下面的#$delta)。但是,对于 String 参数,这将需要手动 SQL 清理...我想避免!

val delta      = 42

val applyDelta =
  if (limitNegatives)
    "GREATEST(0, col_1 + $delta)"
  else
    "col_1 + $delta"

val statement =
  sqlu"""
        UPDATE table_foo
        SET    col_1=#${applyDelta}
      """

任何想法如何在每个 SqlAction 中使用参数 ($delta) 构建 SqlAction

【问题讨论】:

    标签: scala slick slick-3.0


    【解决方案1】:
    val delta      = 42
    
    val applyDelta =
      if (limitNegatives)
        sqlu"UPDATE table_foo set col1 = GREATEST(0, col_1 + ${delta})"
      else
        sqlu"UPDATE table_foo set col1 = col_1 + ${delta}"
    

    applydelta的值是一个可以执行的SqlAction

    【讨论】:

    • 有趣的方法。现在想象一个非常大的查询(20 行),其中只有一小部分更改(1 行),但以 4 种不同的方式更改……您的解决方案建议您重复查询 4 ​​次(总共 80 行)。你能找到一种方法,更接近原始问题,只需要 20+4 行 SQL 吗?
    • 对于您上面描述的情况。不要使用光滑的。 Slick 适用于带有一些参数的类型化查询。但是,如果您的整个查询结构(如表名或列)是动态的,那么 slick 不是一个好的选择。
    猜你喜欢
    • 1970-01-01
    • 2013-03-21
    • 2011-09-10
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 2020-04-03
    相关资源
    最近更新 更多