2013-12-13 1 views
1

Мой дружественный разработчик БД предоставил мне хранимую процедуру, которая, учитывая ID, возвращает мне одну (и только одну) строку данных определенного формата, а затем 0-n строк данных в другом формате.Могу ли я использовать анорму для вызова хранимой процедуры MySQL, которая возвращает два набора строк?

То есть, первая строка всегда будет содержать столбцы а, Ь и с

Тогда я, возможно, получить больше строк назад, и если я делаю, там будет любое число из них, и они будут иметь столбцы d, e, f и g.

Для выполнения этой процедуры хранимые процедуры выполняют два вызова SELECT.

Используя сопоставление для анома, он выполняет вызов и считывает данные с помощью сопоставителя для класса case, который ожидает первую строку, но затем я теряюсь. Я не вижу способа сказать аноним: «Эй, может быть, больше данных, и если да, то для этого есть класс картографа и случая ...»

Возможно ли это?

Вот мой код, который делает вызов:

def sproc[P](name: String, params: Any*)(parser: RowParser[P]) = { 
    DB.withConnection { 
    implicit connection: Connection => 

    val query = createSprocString(name, params.length) 
    val mapped = (for ((p, i) <- params.view.zipWithIndex) yield s"p$i" -> toParameterValue(p)).toArray 

    SQL(query) 
     .on(mapped: _*) 
     .parse(parser *) 
    } 
} 

и я называю это константой выглядит (StuffDTO.parse возвращенного отображения синтаксического анализа):

sproc("SPThatGetsStuffBasedOnAnID", parameters: _*)(StuffDTO.parse) 

Tl; др: есть способ проанализировать возвращенные строки в анормах, когда SQL-вызов возвращает строки разных форматов?

ответ

0

Вы можете использовать потоковую передачу Anorm, анализируя каждую строку один за другим (согласно вашему выбранному дискриминатору).

Учебник Anorm в acolyte использует аналогичный случай: https://github.com/cchantep/acolyte/tree/10m-anorm-tutorial

 Смежные вопросы

  • Нет связанных вопросов^_^