Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 查询异常返回了多个结果集_Postgresql_Scala_Playframework_Anorm - Fatal编程技术网

Postgresql 查询异常返回了多个结果集

Postgresql 查询异常返回了多个结果集,postgresql,scala,playframework,anorm,Postgresql,Scala,Playframework,Anorm,注意 当我使用以下依赖项(即,使用旧版本的Anorm)时,下面的工作与预期的一样(不会引发异常) 问题 在PostgreSQL中,我有一个用户定义的函数 CREATE OR REPLACE FUNCTION pPersonGet(p_personId bigint) RETURNS TABLE ( id bigint, shortname character varying, longname character varying, avatarURL c

注意

当我使用以下依赖项(即,使用旧版本的Anorm)时,下面的工作与预期的一样(不会引发异常)

问题

在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

这是jdbc驱动程序中的一个bug,请看一看

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


p.S.由于此页面在google结果中显示得更高,因此在此处回答将有助于手动执行查询以检查结果。这没有多大意义。PostgreSQL中实现多个结果集的唯一方法是通过
返回一组refcursor
,并通过驱动程序模拟将其转换为多个结果集。请显示完整的堆栈跟踪,并仔细检查您认为触发此操作的代码是否是实际触发此操作的代码。(编辑问题以添加PostgreSQL和PgJDBC版本以及完整堆栈跟踪,完成后在此处进行注释)这并不能提供问题的答案。若要评论或要求作者澄清,请在其帖子下方留下评论-您可以随时对自己的帖子发表评论,一旦您有足够的评论,您就可以发表评论。-我没有足够的声誉来评论这个问题,它需要50分。虽然这个链接可以回答这个问题,但最好在这里包括答案的基本部分,并提供链接供参考。如果链接页面发生更改,则仅链接的答案可能无效。
scala-sdk-2.11.2