【问题标题】:Multiple ResultSets were returned by the query Exception查询异常返回了多个结果集
【发布时间】: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


【解决方案1】:

这是您的 jdbc 驱动程序中的错误,请查看here

当查询字符串在 sql 末尾包含“;\n”时,查询将因您的错误而失败。此错误在版本 1202 和 1203 中发现。我建议您使用版本 9.4-1204+ 或 9.3-1101。

附注由于此页面在 google 结果中显示较高,因此在此处回答

【讨论】:

  • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post。 - From Review
  • 我没有足够的声望来评论问题,它需要50分。
  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 2012-05-17
  • 2023-04-09
相关资源
最近更新 更多