【问题标题】:How to retrieve multiple rows from stored procedure with Scala?如何使用 Scala 从存储过程中检索多行?
【发布时间】:2012-09-29 19:00:03
【问题描述】:

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

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

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

【问题讨论】:

    标签: database scala stored-procedures squeryl


    【解决方案1】:

    为了解决您问题的第二部分,即以更 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)
    }
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-29
      相关资源
      最近更新 更多