Postgresql 查询异常返回了多个结果集
注意 当我使用以下依赖项(即,使用旧版本的Anorm)时,下面的工作与预期的一样(不会引发异常) 问题 在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
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