使用Slick进行Oracle解码逻辑实现

时间:2017-08-02 09:49:22

标签: oracle scala slick

我有以下问题 - 有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

感谢您的任何建议

1 个答案:

答案 0 :(得分:1)

您应该在模式匹配部分重写代码,以便将所需的Rep[Option[Int]] - 与左侧类型进行比较,在您的情况下为Option[Int],或将Rep[Option[Int]]变换为{{1} }类型。 Option[Int]只是替换了slick中的column数据类型。我希望第一个变体 - answer显示如何从Rep进行转换,或者您可以直接使用Rep

map