次に格納されたLOBデータを取り出すためのプロシージャ(Unload_LOB)を続けて作成します(リスト5)。このプロシージャは、格納されているデータのファイル名(filename)とLOBデータの出力先(out_dir)を渡して実行されることで、指定した出力先にLOBデータをファイル名として出力します。
Public Shared Sub Unload_LOB(ByVal filename As String, _ |
リスト5 Unload_LOBプロシージャ(VB.NET) |
このプロシージャでは、データベースへ接続後、OracleDataReaderでBLOBデータを読み出し、そのデータをFileStreamを用いて、指定のディレクトリにファイルとして書き出します。
BLOBデータのファイルへの書き出しも、PL/SQLパッケージとして用意されている「dbms_lob」を使用したPL/SQLブロックを作成することで可能ですが、長く複雑なものになってしまいます。
単純なデータアクセスだけの場合、パフォーマンスなどの点でPL/SQLストアド・プロシージャに多くのメリットがありますが、ファイルへの入出力や、複雑な計算を要する場合などでは、プログラミング言語としての慣れのほかにも.NETストアド・プロシージャにメリットを見いだせるケースも多いでしょう。
Load_LOBとUnload_LOBのコードを記述した後、「ビルド」?「ソリューションの配置」をクリックしてOracle Deployment Wizard for .NETを起動し、.NETストアド・プロシージャをデプロイします。この際、「メソッドおよびセキュリティ詳細を指定」では、スキーマとして「SCOTT」、セキュリティは「外部」を指定します。これらのプロシージャは、ローカルファイルへ入出力を行いますので「外部」を指定する必要があります。
デプロイが無事完了したら、.NETストアド・プロシージャを実行してみましょう。.NETストアド・プロシージャは、Oracleエクスプローラより実行することもできますが、PL/SQLストアド・プロシージャと同様、SQL*Plusからの実行やほかのアプリケーションからの呼び出しも可能です。
リスト6は、SQL*Plusでの実行例です。まず、C:\SOURCEというディレクトリに10g.gifというファイルを用意します。Load_LOBプロシージャを使用して10g.gifファイルをデータベースに格納します。その後、Unload_LOBプロシージャを使用して、データベースに格納されているLOBデータをC:\OUTディレクトリに出力しています。
SQL> EXEC LOAD_LOB('C:\SOURCE\10g.gif') |
リスト6 SQL*PlusでLoad_LOB、Unload_LOBの実行 |
Copyright © ITmedia, Inc. All Rights Reserved.