役に立ちそうもないTips移転版

俺得なTipsを書き連ねるだけのブログ。

Ruby DBIでoutput parameter

バージョンやドライバによると思うが、とりあえず手元にある

の組み合わせでは、素ではストアドプロシージャのOUT paramが取れない。
んじゃどーすっかというと、とりあえず相手がSQL Serverの場合のworkaround例。

# conはConnection
stmt = con.prepare(<<EOS)
BEGIN
DECLARE @out1 hogetype
EXEC ANY_STORED_PROC ?, ?, @out1 OUTPUT
SELECT @out1
END
EOS
stmt.execute(inp1, inp2)
stmt.fetch_array # -> [out1]

要は、

  • OUTパラメータを一旦変数で受けて、SELECTで返させる
  • SQL Serverの場合、ステートメントは改行区切り(なのでヒアドキュメントで書いちまえば楽)

ってとこがわちき的ポイント。