[seasar-dotnet:1934] Re: ストアド実行結果のファイル出力

kubo [E-MAIL ADDRESS DELETED]
2011年 2月 1日 (火) 10:12:13 JST


久保(jflute)です。

八鍬さん、情報ありがとうございます。
ログはログでも、不整合データなどの記録というところですね。

検索エンジンで「T-SQL ファイル出力」で検索してみると、
なかなか素直な方法が出てきませんね(皆苦労されているようで)。

参考までに一つ、xp_cmdshell というプロシージャ!? があるようで、
これを使ってプロシージャ内だけで解決できるか探ってみるのも
一つの手かもしれません。(メイン処理のプロシージャを xp_cmdshell
経由で呼ぶ委譲用プロシージャをアプリから呼ぶとか)
http://msdn.microsoft.com/ja-jp/library/ms175046.aspx
http://homepage1.nifty.com/kojama/works/rdbms/mssql/prog.html#term08

後は既にコメントしましたが、ADO.NET でプロシージャのコンソールの
内容を取得できるか、ここですね。
(どなたか情報持っていればぜひコメントお願いします)
ただ個人的には、たとえそれができたとしてもOUTパラメータで情報を
もらってサーバに送信するのと実装上もデータの流れもなんら変わりは
ないように思えるので、それをやるくらいならOUTパラメータ技で
十分かなとも思います。

あと自分から言えるのは、ファイルに出力した後の業務がどのように
なるか次第ですが、エラー内容を保持するテーブルをDBに作って、
そのテーブルにプロシージャ内で突っ込むようにしてもいいのでは
ないかと思います。バッチのエラーデータは業務情報の一つと言っても
いいくらいの重要なものとも言えるので(売上データとかならなおさら)、
例えば、バッチのエラー内容を確認する画面でも作ってしまえば実業務も
やりやすいですし、過去のエラー内容なども検索しやすくなります。
画面とまでいかなくても、エラー内容を見たかったらそのテーブルの内容を
ファイルに吐き出すバッチが一つあればほとんど同じことです。
(テーブルに入れて、すぐ xp_cmdshell の bcp で出力するとか)
つまり、DBに入れておけばその後いくらでもどのようにでも扱えるので、
環境が許せば自分だったらDBに格納します。
(というか、実際にそういうDB設計したことは何度もあります)

2011/2/1 八鍬達也 <[E-MAIL ADDRESS DELETED]>:
> 八鍬です。
>>プロシージャ内の処理のトレースをするためにログをファイルに
>>出力したいのかな?って思って先ほどコメントしましたが、
>>そもそもコンソールに出そうと思っている内容が何なのか見えず、
>>他のML閲覧者もアドバイスしづらいのかなと思ったので、
>>もうちょい背景があると話が進みやすいのかなと思います。
> おっしゃる通りです。
> 失礼いたしました。。。
>
> 背景としては、
> 売上データを様々な営業企画をもとに集計を行うといった趣旨のシステムに開発に携わっております。
> 環境は、
> SQLSERVER2005とC#のDBFlute.NET-0.8.9.24 を使用した、
> windowsフォームアプリケーションになります。
> ストアドは、T-SQLで直接ユーザストアドプロシージャを作成しており、
> CLRは使用しておりません。
>
> その中で、売上データを集計する処理をストアドで実装しているのですが、
> このデータの中には、不整合を起こす可能性のあるものやデータ型の合わないものも含んでいる可能性があります。
> ですので、この処理中に該当するレコードでエラーが発生した際には、
> 処理の進捗や、データの登録内容、エラーの内容をコンソールに出力しています。
> (T-SQLではPRINT ’hogehoge’を使用)
>
> DBサーバがホスティングを利用しているため、
> サーバ上に直接LOGファイルを出力するような方法がとれないかを検討しておりました。
>
> OUTパラメータとLOG4NETの方法も手段のひとつとして考えられるのですが、
> クライアント側にファイルが作られる点が問題でした。
> (ネットワーク経由でサーバのフォルダ出力するとかの回避策はあるのですが。。。)
> 以上です。
> 2011年2月1日0:10 kubo <[E-MAIL ADDRESS DELETED]>:
>>
>> 久保(jflute)です。
>>
>> あと、ぜひこちらをお読み下さい。
>>
>> http://dbflute.sandbox.seasar.org/ja/manual/topic/office/feedback.html#background
>>
>> プロシージャ内の処理のトレースをするためにログをファイルに
>> 出力したいのかな?って思って先ほどコメントしましたが、
>> そもそもコンソールに出そうと思っている内容が何なのか見えず、
>> 他のML閲覧者もアドバイスしづらいのかなと思ったので、
>> もうちょい背景があると話が進みやすいのかなと思います。
>>
>> 2011/1/31 kubo <[E-MAIL ADDRESS DELETED]>:
>> > 久保(jflute)です。
>> >
>> > 八鍬さん、こんばんは
>> > まずは、データベース(DBMS)は何でしょうか?
>> > ストアドプロシージャは DBMS ごとの方言が激しい領域
>> > ですので、まずはここを明示された方が良いかと思います。
>> >
>> > DBFlute.NETのプロシージャ呼び出しは、
>> > 単に ADO.NET に実行しているだけと言えますので、
>> > そもそも ADO.NET でプロシージャ内部のコンソール
>> > 出力内容をプログラムで取得できるのか?
>> > あたりを探ってみた方が良いかと思います。
>> > (ADO.NET でできないことは PmBean でもできないので)
>> > とりあえず現状 DBFlute.NET では、プロシージャ内部で
>> > 出力されたコンソールの内容に対して何か行うというような
>> > ロジックは何もありません。
>> >
>> > プロシージャ内のログをファイルに出力したいというような
>> > 話でしたら、プロシージャ内でコンソールに出力するのではなく、
>> > 出力内容を文字列にしてプログラム側にOUTパラメータなどで
>> > 渡して、プログラムで log4net 経由でファイルに出力するという
>> > ような形も一つの選択肢かもしれませんね。
>> >
>> >> EXEC uspSamle1 'param' > Output.txt
>> >
>> > また場合によっては、これと同じコマンドをプログラムから
>> > 呼び出してしまうというのも一つの選択肢かと思います。
>> >
>> > 2011/1/31 八鍬達也 <[E-MAIL ADDRESS DELETED]>:
>> >> 八鍬と申します。
>> >> PmBeanを使用したストアドプロシージャの実行について、
>> >> 質問させて下さい。
>> >>
>> >> Windows等のコマンド上からストアドを実行した場合、
>> >> --
>> >> EXEC uspSamle1 'param' > Output.txt
>> >> --
>> >> などの記述でコンソールの内容をファイルに出力できます。
>> >> これと同等のことをDbFluteのPmBeanを使用して実行した場合にも、
>> >> 実装したいのですが、カスタマイズによって実現可能はでしょうか??
>> >>
>> >> --
>> >> --
>> >>
>> >> ----------------------------------------------------------------------------
>> >> 八鍬 達也
>> >> Mail : [E-MAIL ADDRESS DELETED]
>> >>
>> >>
>> >> _______________________________________________
>> >> seasar-dotnet mailing list
>> >> [E-MAIL ADDRESS DELETED]
>> >> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>> >>
>> >>
>> >
>> _______________________________________________
>> seasar-dotnet mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>
>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>
>


seasar-dotnet メーリングリストの案内