我可以使用anorm来调用返回两个行集的MySQL存储过程吗?

时间:2013-12-13 01:57:32

标签: mysql scala anorm

我友好的数据库开发人员给了我一个存储过程,给定一个ID,返回给我一个(并且只有一个)特定格式的数据行,然后返回不同格式的0-n行数据。 / p>

也就是说,第一行将始终包含列a,b和c

然后我可能会收到更多的行,如果我这样做,会有任意数量的行,它们将有d,e,f和g列。

存储过程执行两次SELECT调用来完成此操作。

使用anorm的映射,它使用映射器进行调用并读取数据,用于期望第一行的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; dr:有没有办法在SQL调用返回不同格式的行时解析anorm中返回的行?

1 个答案:

答案 0 :(得分:0)

您可以使用Anorm流式处理,逐个解析每一行(根据您选择的鉴别器;请参阅personal tutorial)。