如何在slick中使用sql"""插值来编写动态SQL查询

Joh*_*ohn 17 scala slick

我是Scala和Slick的新手,并试图用Slick插值编写一个简单的SQL查询.

案例1:我希望概括代码,以便将查询存储为常量.

例如:

val SQL_ALL_TABLE_METADATA: String = """SELECT DISTINCT table_name, column_name, data_type
                                            FROM information_schema.columns
                                                    WHERE table_schema = 'apollo' OR table_schema = 'dpa' ORDER BY table_name""";
Run Code Online (Sandbox Code Playgroud)

并从常量之类的东西创建简单查询

var plainQuery = sql"""$SQL_ALL_TABLE_METADATA""".as[List[String]]
Run Code Online (Sandbox Code Playgroud)

案例2:替换部分查询

例如:从表'table1'获取有关列f_name的信息

var column= "f_name"
var plainQuery = sql"""SELECT $column FROM table1""".as[String]
Run Code Online (Sandbox Code Playgroud)

当我尝试上述情况时它不起作用,因为它看起来像查询在编译时静态绑定.

请注意,到目前为止,我想使用纯SQL并在将来使用高级Slick API.

Dim*_*tri 16

情况1

为什么不简单地拥有这个?

val SQL_ALL_TABLE_METADATA: StaticQuery = sql"""SELECT DISTINCT table_name, column_name, data_type
                                            FROM information_schema.columns
                                                    WHERE table_schema = 'apollo' OR table_schema = 'dpa' ORDER BY table_name"""

var plainQuery = SQL_ALL_TABLE_METADATA.as[List[String]]
Run Code Online (Sandbox Code Playgroud)

案例2

#$而不是$

var column= "f_name"
var plainQuery = sql"""SELECT #$column FROM table1""".as[String]
Run Code Online (Sandbox Code Playgroud)