2012-10-09 68 views
1

假設你有一個存儲過程或函數返回多個列,如How to return multiple rows from the stored procedure? (Oracle PL/SQL)討論如何使用Scala從存儲過程中檢索多行?

這將是一個很好的方式,使用Scala的,以「SELECT * FROM表(all_emps);」 (取自上面的URL)並讀取將成爲結果的多行數據?

據我所見,使用Squeryl不可能做到這一點。是否有像我可以使用的Squeryl這樣的縮放工具,還是我必須刪除JDBC?

回答

2

返回表的函數是Oracle特有的功能,我懷疑ORM(不管是Scala還是Java)都支持這種專有擴展。 所以我認爲你自己或多或少:)。 最簡單的方法可能是使用普通的JDBC java.sql.Statement,並使用executeQuery方法執行「select * from table(all_emps)」。

+0

PostgreSQL具有相同的功能:http://jdbc.postgresql.org/documentation/91/callproc.html - 但我明白你的意思,JDBC可能是要走的路。 –

0

要解決您的問題的第二部分有關從表格中選擇更具尺度的方式的方法,我使用的是Slick。從他們的示例文檔引用:

case class Coffee(name: String, supID: Int, price: Double) 

implicit val getCoffeeResult = GetResult(r => Coffee(r.<<, r.<<, r.<<)) 

Database.forURL("...") withSession { 
Seq(
Coffee("Colombian", 101, 7.99), 
Coffee("Colombian_Decaf", 101, 8.99), 
Coffee("French_Roast_Decaf", 49, 9.99) 
).foreach(c => sqlu""" 
insert into coffees values (${c.name}, ${c.supID}, ${c.price}) 
""").execute) 

val sup = 101 
val q = sql"select * from coffees where sup_id = $sup".as[Coffee] 
// A bind variable to prevent SQL injection^
q.foreach(println) 
} 

雖然我不知道它是如何處理(如果有的話)與存儲特效/功能。

相關問題