【发布时间】:2015-09-25 19:43:31
【问题描述】:
注意
当我使用以下依赖项(即使用旧版本的 Anorm)时,以下内容按预期工作(不会引发异常)。
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.8")
"org.postgresql" % "postgresql" % "9.4-1202-jdbc42"
问题
在 PostgreSQL 中我有一个用户定义的函数
CREATE OR REPLACE FUNCTION pPersonGet(p_personId bigint)
RETURNS TABLE (
id bigint,
shortname character varying,
longname character varying,
avatarURL character varying,
isActive boolean) AS
$$
BEGIN
return QUERY
select p.id, p.shortname, p.longname, p.avatarURL, p.isActive
From person p
where p_personId is null or p.id = p_personId;
END
$$ LANGUAGE plpgsql;
使用 Anorm 2.4 执行以下 find 函数时
val selectStmt =
"""
select id, shortname, longname, avatarURL, isActive from pPersonGet({id});
"""
....
....
val simple = {
get[PersonID]("id") ~
str("shortname") ~
str("longname") ~
str("avatarurl") ~
get[Boolean]("isActive") map {
case id~shortname~longname~avatarurl~isActive
=> Person(Some(id),
Name(short, long),
avatarurl,
isActive)
}
}
....
....
def find(id:Option[PersonID]) : List[Person] = {
DB.withConnection { implicit conn =>
anorm.SQL(selectStmt).on("id" -> id).as(simple *)
}
}
我得到以下异常
[PSQLException: Multiple ResultSets were returned by the query.]
依赖关系:
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.4.0")
"org.postgresql" % "postgresql" % "9.4-1202-jdbc42"
"com.typesafe.play" %% "anorm" % "2.4.0"
Scala 版本
scala-sdk-2.11.2
【问题讨论】:
-
手动执行查询以检查结果会很有用。
-
这没有多大意义。在 PostgreSQL 中实现多个结果集的唯一方法是通过
returns setof refcursor,并且通过驱动程序仿真将其转换为多个结果集。请显示完整的堆栈跟踪并仔细检查您认为触发它的代码是否实际触发了它。 (编辑问题以添加 PostgreSQL 和 PgJDBC 版本以及完整的堆栈跟踪,然后在完成后在此处评论)
标签: postgresql scala playframework anorm