検索
連載

VB.NETで楽々Oracleストアド・プロシージャ作成.NETでOracleアプリを作ろう(5)(2/4 ページ)

本記事では、Oracleが提供する.NETプラットフォーム開発向けのミドルウェアやツールを使って、.NET環境でOracleアプリケーション開発を効率的に行うためのノウハウを解説する。(編集部)

PC用表示 関連情報
Share
Tweet
LINE
Hatena

LOBデータのロード/アンロード

 GetEname関数は、データベースにアクセスする非常にシンプルな関数ですが、単にデータベースにアクセスするだけの関数であれば、Oracleデータベース固有のトランザクション処理言語であるPL/SQLによる実装でも簡単にVS.NETから作成することができますし高速です。

 次は少し実践的に、OracleデータベースにLOB(Large Object)データ(画像ファイルなどのバイナリファイル)を格納したり、取り出したりするサンプルを作成してみましょう。日ごろ慣れ親しんだ、.NET準拠言語でOSファイルの読み取り・書き出しの実装が可能ですので、比較的簡単にLOBデータを扱うプロシージャを実装することができます。

手順1 LOBデータを格納する表を作成

 まず、データベースでLOBデータを格納するためのテーブル(BLOB_TBL)を作成します。新規テーブルの作成は、VS.NETのOracleエクスプローラ上の「表」を右クリックし、「新規リレーショナル表」をクリックして行います。BLOB_TBLの構造を表1に示します。

図3 OracleエクスプローラからBLOB_TBLの作成
図3 OracleエクスプローラからBLOB_TBLの作成
列名 データ型 目的
NAME VARCHAR2 格納するLOBデータ名の格納用
IMAGE BLOB バイナリのLOBデータ格納用
表1 BLOB_TBLの構造

 表名や列の設定が終わったら、「保存」ボタンをクリックします。

手順2 LOBデータをロードするプロシージャの作成

 まず、LOBデータをデータベースに格納するためのプロシージャとして、Load_LOBプロシージャを作成します。このプロシージャは、格納するLOBデータのパスを渡すことで、そのファイルをデータベースに格納するものになります。LOBデータのパスからファイル名を取得し、BLOB_TBLのNAME列に格納し、ファイルをIMAGE列に格納するプロシージャです。

 新しいプロジェクトをOracle Projectとして作成し、リスト4のコードを記述します。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 今回はファイルの入出力を行いますので、クラスファイルの先頭に「Imports System.IO」と記述しておきます。ソースの前半(「データベースへの接続の準備」の前まで)は、純粋にVB.NETの世界です。パスからファイル名を取り出し、FileStreamを使用して、ファイルをByte配列として読み込みます。

 「データベースへの接続の準備」からは、一般的なODP.NETの記述になります。バインド変数を持つINSERT文をOracleCommandとして用意し、OracleParameterを通じて、ファイル名やLOBデータをバインドし、実行します。

 BLOB列へのデータの挿入は、PL/SQLパッケージとして用意されている「dbms_lob」を使用したPL/SQLブロックで行うこともできますが、.NETストアド・プロシージャの方がシンプルで一般的な記述で作成可能です。(次ページへ続く)

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る