如何使用Scala从存储过程中检索多行?

时间:2012-10-09 12:33:59

标签: database scala stored-procedures squeryl

假设您有一个存储过程或函数返回多行,如How to return multiple rows from the stored procedure? (Oracle PL/SQL)

中所述

使用Scala“从表中选择*(all_emps);”这是一个好方法。 (取自上面的URL)并读取可能是结果的多行数据?

据我所知,使用Squeryl无法做到这一点。是否有像Squeryl这样的scalaified工具,我可以使用,还是必须删除JDBC?

2 个答案:

答案 0 :(得分:2)

返回表的函数是Oracle特有的功能,我怀疑ORM(无论是Scala还是Java)都支持这种专有扩展。 所以我认为你自己或多或少:)。 可能最简单的方法是使用普通的JDBC java.sql.Statement并使用executeQuery方法执行“select * from table(all_emps)”。

答案 1 :(得分:0)

要解决有关以更加scala-esque方式从表中进行选择的方法的问题的第二部分,我使用的是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)
}

虽然我不确定它是如何处理(如果有的话)存储过程/函数。