我有以下问题 - 有DECODE oracle函数的sql:
SELECT u.URLTYPE, u.URL
FROM KAA.ENTITYURLS u
JOIN KAA.ENTITY e
ON decode(e.isurlconfigured, 0, e.urlparentcode, 1, e.CODE,
NULL)=u.ENTITYCODE
JOIN CASINO.Casinos c ON e.casinocode = c.code
WHERE e.NAME = $entityName
AND C.NAME = $casinoName
我试图在我的光滑代码中实现这个sql,例如:
val queryUrlsEntityName = for {
entityUrl <- entityUrls
entity <- entities.filter(e => e.name.trim===entityName &&
entityUrl.entityCode.asColumnOf[Option[Int]]==(e.isURLConfigured match
{
case Some(0) => e.urlParentCode
case Some(1) => e.code.asColumnOf[Option[Int]]
case _ => None
}
)
)
casino <- casinos.filter(_.name.trim===casinoName) if
entity.casinoCode==casino.code
} yield (entityUrl)
但我不明白如何实现行
中值的匹配case Some(0) => e.urlParentCode
因为我收到错误
constructor cannot be instantiated to expected type;
[error] found : Some[A]
[error] required: slick.lifted.Rep[Option[Int]]
[error] case Some(0) => e.urlParentCode
感谢您的任何建议
答案 0 :(得分:1)
您应该在模式匹配部分重写代码,以便将所需的Rep[Option[Int]]
- 与左侧类型进行比较,在您的情况下为Option[Int]
,或将Rep[Option[Int]]
变换为{{1} }类型。 Option[Int]
只是替换了slick中的column数据类型。我希望第一个变体 - answer显示如何从Rep
进行转换,或者您可以直接使用Rep
:
map