0

HDBCが単一のステートメントで複数の結果セットをサポートする方法を探しています

testMultipleResultsetSingleStatement = do
  let sql = "select 1,2,3 union all select 2,3,4 select 'a', 'b'"
  c <- connectODBC connectionString
  rs <- quickQuery c sql []
  return rs

これは返すだけです[[SqlInt32 1,SqlInt32 2,SqlInt32 3],[SqlInt32 2,SqlInt32 3,SqlInt32 4]]

ここで、2 番目の結果セットの結果が破棄されていることがわかります

これをサポートする QuickQuery 以外の関数があるかどうか疑問に思っていますか?

理想的には、戻り値の型は[[[SqlValue]]]代わりに[[SqlValue]]、最初の最も外側のリストがクエリによって返される各結果セットに対応します。

HDBCがその方法を提供しない場合、複数の結果セットを返すステートメントを処理する他のパッケージはどれでしょうか?

編集: 実際には、API の変更を伴わない解決策は、次のように機能させることです。

testMultipleResultsetSingleStatement = do
  let
    sql = "select 1,2,3 union all select 2,3,4 select 'a', 'b'"
  c <- connectODBC connectionString
  statement <- prepare c sql
  _ <- execute statement []
  rows1 <- fetchAllRows statement
  rows2 <- fetchAllRows statement
  return (rows1, rows2)

私がチェックしたところ、sqlserverの場合、rows2の空のリストが返されました

4

1 に答える 1

1

いいえ、hdbc では現在サポートされていません。

この種の機能の目的はわかりませんが。

よりもどのように良いでしょうか

let sql1 = "select 1,2,3 union all select 2,3,4"
    sql2 = " select 'a', 'b'"

c <- connectODBC connectionString

rs1 <- quickQuery c sql1 []
rs2 <- quickQuery c sql2 []

return (rs1,rs2)

または、1 つのリストにさまざまな数のフィールドとフィールドの種類を持つ異なるレコードを本当に主張する場合 (うーん、奇妙ですが、大丈夫です)、これを行うことができます。

return $ rs1 ++ rs2
于 2013-10-15T19:37:33.170 に答える