1

假设您有一个返回多行的存储过程或函数,如如何从存储过程返回多行?(甲骨文 PL/SQL)

什么是使用 Scala 来“从表中选择 * (all_emps);”的好方法?(取自上面的 URL)并读取结果的多行数据?

据我所知,使用 Squeryl 是不可能做到这一点的。我可以使用像 Squeryl 这样的可扩展工具,还是必须使用 JDBC?

4

2 回答 2

2

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

于 2012-10-09T14:50:20.700 回答
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)
}

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

于 2012-10-10T11:35:15.393 回答