Scala 使用slick创建表视图
如何使用slick 3创建查询 我在那张精美的文件里找不到答案Scala 使用slick创建表视图,scala,slick,Scala,Slick,如何使用slick 3创建查询 我在那张精美的文件里找不到答案 这个问题与我的另一个问题有关。我得到了正确的答案,但我不知道如何使用slick实现它 在Slick 3中只有对视图的基本支持,不能保证完整的编译时安全性和组合性,考虑到大多数视图强烈依赖于其他表中的数据,后者尤其重要。 您可以将视图描述为表和单独的模式操作语句,必须使用这些语句,而不是标准的表模式扩展方法,如create和drop。以下是数据库中已存在的注册表主题和行表的示例: case class RegRn(id: Int, n
这个问题与我的另一个问题有关。我得到了正确的答案,但我不知道如何使用slick实现它 在Slick 3中只有对视图的基本支持,不能保证完整的编译时安全性和组合性,考虑到大多数视图强烈依赖于其他表中的数据,后者尤其重要。 您可以将视图描述为表和单独的模式操作语句,必须使用这些语句,而不是标准的表模式扩展方法,如create和drop。以下是数据库中已存在的注册表主题和行表的示例:
case class RegRn(id: Int, name: String, count: Long)
trait View{
val viewName = "REG_RN"
val registryTableName = "REGISTRY"
val rowsTableName = "ROWS"
val profile: JdbcProfile
import profile.api._
class RegRns(tag: Tag) extends Table[RegRn](tag, viewName) {
def id = column[Int] ("REGISTRY_ID")
def name = column[String]("NAME", O.SqlType("VARCHAR"))
def count = column[Long] ("CT", O.SqlType("VARCHAR"))
override def * = (id, name, count) <> (RegRn.tupled, RegRn.unapply)
...
}
val regRns = TableQuery[RegRns]
val createViewSchema = sqlu"""CREATE VIEW #$viewName AS
SELECT R.*, COALESCE(N.ct, 0) AS CT
FROM #$registryTableName R
LEFT JOIN (
SELECT REGISTRY_ID, count(*) AS CT
FROM #$rowsTableName
GROUP BY REGISTRY_ID
) N ON R.REGISTRY_ID=N.REGISTRY_ID"""
val dropViewSchema = sqlu"DROP VIEW #$viewName"
...
}
在视图序言之后追加查询文本如何:
val yourAwesomeQryComposition : TableQuery = ...
val qryText = yourAwesomeQryComposition.map(reg => (reg.id, ....)).result.statements.head
val createViewSchema = sqlu"""CREATE VIEW #$viewName AS #${qryText}"""
val yourAwesomeQryComposition : TableQuery = ...
val qryText = yourAwesomeQryComposition.map(reg => (reg.id, ....)).result.statements.head
val createViewSchema = sqlu"""CREATE VIEW #$viewName AS #${qryText}"""