将 `Option[BigDecimal]` 与 Anorm 一起使用?
Using `Option[BigDecimal]` with Anorm?
鉴于:
build.sbt
$cat build.sbt
scalaVersion := "2.11.8"
libraryDependencies += "com.typesafe.play" % "anorm_2.11" % "2.5.1"
REPL
import anorm._
val x: Option[BigDecimal] = Some(42)
val none: Option[BigDecimal] = None
// invoke Oracle function `f`
scala> SQL""" select f(#$x) from dual """.sql.statement
res0: String = " select f(Some(42)) from dual "
scala> SQL""" select f(#$none) from dual """.sql.statement
res1: String = " select f(None) from dual "
我希望 res0
等于:select f(42) from dual
,res1
等于 select f(NULL) from dual
。
如何修改我的 SQL
代码以适应我想要的结果?
我根据 导入了 anorm._
,但是,它没有给出我想要的结果。
使用$
插值,直接使用SQL""" select f($x) from dual """
即可。
你 可以 用 #$
做,但你当然不应该(#$
应该只在你不能做你想做的事情时使用想要 $
:例如用于插值 table 或列名):
def invokeF(x: Option[BigDecimal]) = {
val xInSql = x.fold("NULL")(_.toString) // can be inlined to get even less readable
SQL""" select f(#$xInSql) from dual """
}
鉴于:
build.sbt
$cat build.sbt
scalaVersion := "2.11.8"
libraryDependencies += "com.typesafe.play" % "anorm_2.11" % "2.5.1"
REPL
import anorm._
val x: Option[BigDecimal] = Some(42)
val none: Option[BigDecimal] = None
// invoke Oracle function `f`
scala> SQL""" select f(#$x) from dual """.sql.statement
res0: String = " select f(Some(42)) from dual "
scala> SQL""" select f(#$none) from dual """.sql.statement
res1: String = " select f(None) from dual "
我希望 res0
等于:select f(42) from dual
,res1
等于 select f(NULL) from dual
。
如何修改我的 SQL
代码以适应我想要的结果?
我根据 导入了 anorm._
,但是,它没有给出我想要的结果。
使用$
插值,直接使用SQL""" select f($x) from dual """
即可。
你 可以 用 #$
做,但你当然不应该(#$
应该只在你不能做你想做的事情时使用想要 $
:例如用于插值 table 或列名):
def invokeF(x: Option[BigDecimal]) = {
val xInSql = x.fold("NULL")(_.toString) // can be inlined to get even less readable
SQL""" select f(#$xInSql) from dual """
}