GetEname関数は、データベースにアクセスする非常にシンプルな関数ですが、単にデータベースにアクセスするだけの関数であれば、Oracleデータベース固有のトランザクション処理言語であるPL/SQLによる実装でも簡単にVS.NETから作成することができますし高速です。
次は少し実践的に、OracleデータベースにLOB(Large Object)データ(画像ファイルなどのバイナリファイル)を格納したり、取り出したりするサンプルを作成してみましょう。日ごろ慣れ親しんだ、.NET準拠言語でOSファイルの読み取り・書き出しの実装が可能ですので、比較的簡単にLOBデータを扱うプロシージャを実装することができます。
まず、データベースでLOBデータを格納するためのテーブル(BLOB_TBL)を作成します。新規テーブルの作成は、VS.NETのOracleエクスプローラ上の「表」を右クリックし、「新規リレーショナル表」をクリックして行います。BLOB_TBLの構造を表1に示します。
列名 | データ型 | 目的 |
---|---|---|
NAME | VARCHAR2 | 格納するLOBデータ名の格納用 |
IMAGE | BLOB | バイナリのLOBデータ格納用 |
表1 BLOB_TBLの構造 |
表名や列の設定が終わったら、「保存」ボタンをクリックします。
まず、LOBデータをデータベースに格納するためのプロシージャとして、Load_LOBプロシージャを作成します。このプロシージャは、格納するLOBデータのパスを渡すことで、そのファイルをデータベースに格納するものになります。LOBデータのパスからファイル名を取得し、BLOB_TBLのNAME列に格納し、ファイルをIMAGE列に格納するプロシージャです。
新しいプロジェクトをOracle Projectとして作成し、リスト4のコードを記述します。
Imports System.IO |
リスト4 Load_LOBプロシージャ(VB.NET) |
今回はファイルの入出力を行いますので、クラスファイルの先頭に「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.