連載
» 2006年03月07日 00時00分 公開

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

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

[小海友和,日本オラクル]

 前回「Oracleにも“SQL CLR”と同じ開発生産性を!」では、Oracle Database 10g Release2の新機能であるOracle Database Extensions for .NET(以下、ODE.NET)を使用して、簡単な.NETストアド・プロシージャを作成する手順を紹介しました。今回は、.NETストアド・プロシージャでOracleデータベースにアクセスする方法について説明します。.NETストアド・プロシージャからOracleデータベースへアクセスするには、Oracle Data Provider for .NET(以降、ODP.NET)を使用します。

データベース・アクセス基礎

 まずは、データベースにアクセスする簡単な.NETストアド・プロシージャとして、社員表(EMP表)の社員番号(EMPNO)を渡すと社員名(ENAME)を返し、該当社員がいない場合は「該当なし」を返す関数(GetEname)を作成してみましょう。

メモ:EMP表はSCOTTユーザーにデフォルトで存在するサンプルの表です。SCOTTユーザーについては第2回に記述したように、アカウントをアンロックする必要があります。

手順1 新規プロジェクトの作成

 Visual Studio .NET(以下、VS.NET)より新しいプロジェクトを作成します。この際、Oracle Projectを選択してください。Oracle Projectとして、VS.NETのプロジェクトを開始した場合、クラスファイルの先頭にリスト1のようにODP.NETを使用するために必要な名前空間があらかじめ記述されています。

Imports Oracle.DataAccess.Client
Imports Oracle.DataAccess.Types
リスト1 Oracle Projectであらかじめインポートされる名前空間

手順2 ファンクションの作成

 リスト2のようにファンクションを作成します。データベースにアクセスする部分については、ODP.NETを使用します。

Public Shared Function GetEname(ByVal empno As Int16) As String
    ' データベースへの接続の準備
    Dim conn As New OracleConnection("context connection=true")

    ' 実行するSQL文の準備
    Dim sqlStr As String = "SELECT ename FROM emp WHERE empno=:1"

    ' OracleCommandの準備
    Dim cmd As New OracleCommand(sqlStr, conn)

    ' OracleParameterの準備とバインド
    Dim param As OracleParameter = _
      cmd.Parameters.Add(":1", OracleDbType.Varchar2)
    param.Direction = ParameterDirection.Input
    param.Value = empno

    ' データベースへ接続
    conn.Open()

    ' コマンドの実行とレコードの読み取り
    Dim dr As OracleDataReader = cmd.ExecuteReader
    Dim ename As String
    If dr.Read Then
        ename = dr.Item("ename")
    Else
        ename = "該当なし"
    End If

    ' OracleDataReaderのクローズ
    dr.Close()

    ' 接続を閉じる
    conn.Close()

    ' 関数の返り値を代入
    Return ename
End Function
リスト2 GetEname関数(VB.NET)

 ODP.NETでの開発の詳細については、@ITの記事「ODP.NETファーストステップ」をご覧ください。.NETストアド・プロシージャを作成する場合でも、基本的なコーディングは通常のODP.NETでの開発と変わりはありませんが、.NETストアド・プロシージャでは、リスト3のように接続情報を記述することができます。

    ' データベースへの接続の準備
    Dim conn As New OracleConnection("context connection=true")
リスト3 .NETストアド・プロシージャでのデータベース接続情報(VB.NET)

 「context connection=true」とすることで、すでに張られている呼び出し元のコネクションを引き継いで利用することができます。すでに接続しているコネクションを利用するため、ユーザー名やパスワードなどの接続情報は記述する必要がありません。

メモ:「context connection」は.NETストアド・プロシージャだけで使用可能な属性です。

 この接続方式を使用する場合、コネクションと同時にトランザクションも引き継ぎますので、明示的にトランザクションを開始することができません。新規にトランザクションを開始したい場合は、通常どおり「user id=scott; password=tiger; data source=orcl」などと記述して、新規コネクションを使用する必要があります。

手順3 .NETストアド・プロシージャのデプロイ

 コードの記述後、「ビルド」?「ソリューションの配置」をクリックしてOracle Deployment Wizard for .NET起動し、.NETストアド・プロシージャをデプロイします。この際、「メソッドおよびセキュリティ詳細を指定」では、スキーマとして「SCOTT」、セキュリティは「安全」を指定します。

図1 Oracle Deployment Wizard for .NETでメソッドおよびセキュリティ詳細を指定 図1 Oracle Deployment Wizard for .NETでメソッドおよびセキュリティ詳細を指定

手順4 .NETストアド・プロシージャの実行

 デプロイが完了したら、実行してみましょう。

図2 Oracleエクスプローラより実行 図2 Oracleエクスプローラより実行

 該当する社員番号がある場合はその社員名が、該当する社員番号が存在しない場合、「該当なし」が返されることが確認できます。(次ページへ続く)

       1|2|3|4 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。