Как получить несколько строк из хранимой процедуры с Scala?

Допустим, у вас есть хранимая процедура или функция, возвращающая несколько строк, как описано в разделе Как вернуть несколько строк из хранимой процедуры? (Oracle PL / SQL)

Что было бы хорошим способом, используя Scala, "выбрать * из таблицы (all_emps)"; (взято из URL выше) и прочитать несколько строк данных, которые будут результатом?

Насколько я вижу, это невозможно сделать с помощью Squeryl. Есть ли такой инструмент, как Squeryl, который я могу использовать, или мне нужно перейти на JDBC?

2 ответа

Функции, которые возвращают таблицы, являются специфической особенностью Oracle, я сомневаюсь, что ORM (будь то Scala или даже Java) будет поддерживать такое проприетарное расширение. Так что я думаю, что ты более или менее сам по себе:). Вероятно, самый простой способ - использовать простой JDBC java.sql.Statement и выполнить "select * from table (all_emps)" с помощью метода executeQuery.

Чтобы ответить на вторую часть вашего вопроса о способе выбора из таблицы более легкомысленно, я использую 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)
}

Хотя я не уверен, как он справляется (если вообще) с хранимыми процессами / функциями.

Другие вопросы по тегам