查询Exception返回多个ResultSet

时间:2015-09-25 19:43:32

标签: postgresql scala playframework anorm

注意

当我使用以下依赖项(即使用较旧版本的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

1 个答案:

答案 0 :(得分:-1)

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

当查询字符串包含&#34 ;; \ n"在sql的最后,查询将因您的错误而失败。在版本1202和1203中发现了此错误。我建议您使用版本9.4-1204 +或9.3-1101。

<强> P.S。回答此处,因为此页面在Google搜索结果中显示较高