2015-09-25 73 views
0

注意返回多個結果被查詢異常

當我用下面的依賴(即使用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

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 *) 
    } 
    } 

我得到下面的異常執行以下find功能

[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-sdk-2.11.2 
+0

手動執行查詢以檢查結果會很有用。 – cchantep

+1

這並不重要。在PostgreSQL中,多個結果集可能的唯一方式是通過'return setof refcursor',並通過驅動程序仿真將其轉換爲多個結果集。請顯示完整的堆棧跟蹤並仔細檢查您認爲觸發的代碼是實際觸發的代碼。 (編輯問題以添加PostgreSQL和Pg​​JDBC版本以及完整的堆棧跟蹤,然後在完成時發表評論) –

回答

-1

它在你的JDBC驅動程序中的錯誤,看看here

當查詢字符串包含 「\ n」在sql的最後,查詢會失敗,並顯示錯誤。這個bug在版本1202和1203中找到。我建議你使用版本9.4-1204 +或9.3-1101。

P.S.回答此處,因爲此頁面在谷歌搜索結果中顯示較高

+0

這不提供問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你會能夠[評論任何帖子](http://stackoverflow.com/help/privileges/comment)。 - [來自評論](/ review/low-quality-posts/10876081) – Ryan

+0

我沒有足夠的評論問題的評論,它需要50分。 – Alexey

+0

儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 – cpburnz