はじめに Oracle Database 10g Release2では、データベースのストアドプロシージャ/ファンクション(以下、ストアドプロシージャ)を.NET準拠言語であるVB.NETやC#で作成できます。これらの.NET準拠言語で作成されたストアドプロシージャを「.NETストアドプロシージャ」と呼びます。そして、これを実現するのがOracleDatabase Extensions for .NET(以下、ODE.NET)です。
通常、OracleのストアドプロシージャはPL/SQLという言語で記述する必要がありますが、ODE.NETを利用すると、PL/SQLを利用したことのない開発者でも、VBやC#といった言語でOracleのストアドプロシージャを作成できます。今回は、ODE.NETを利用して.NETストアドプロシージャを記述してみましょう。
対象読者
VB、もしくはC#でOracleのストアプロシージャを記述したい人。
必要な環境 Visual Studio 2005 Standard Edition以上が必要です。また、ODE.NETはOracleDatabase 10g Release2(10.2.0)から実装された機能で、Windows上で動作するOracleに限定されます。OracleのEditionはStandardEdition ONE以上から利用可能です。その他、.NETストアドプロシージャの開発、デプロイを行うために、Oracle Developer Tools for Visual Studio .NET 10.2(以下、ODT 10.2)が必要になります。
ODE.NETのインストール(1/2) ODE.NETをインストールしてみましょう。ODE.NETはOracleデータベース側の機能なので、Oracleをインストールする時にODE.NETも一緒にインストールします。注意点として、ODE.NETはデフォルトではインストールされないため、データベースをインストールする際のインストール・タイプで[カスタム]を選択します。
上記サイトから、[Oracle Data Provider for .NET 2.010.2.0.2.20]をクリックし、[Oracle Developer Tools for Visual Studio .NET withODAC10.2.0.2.20]をクリックします(ここからはOTNへのログインが必要になり、ログインしていない場合は、ログインを行う画面が表示されます)。
ライセンス契約書が表示されるので、すべての内容を確認して必要なチェックボックスをオンにし[同意する]ボタンをクリックすると、ファイルのダウンロードページが表示されます。[ODTwithODAC10202.exe]をクリックすると、ファイルのダウンロードが開始します。
ダウンロードした「ODTwithODAC10202.exe」は自己解凍形式の圧縮ファイルになっていますので、エクスプローラからダブルクリックして解凍すると、「stage」と「install」という2つのフォルダが作成されます。「install」フォルダから「setup.exe」を実行し、Oracle UniversalInstaller(以下、OUI)起動させ「ようこそ」の画面で、[次へ]ボタンをクリックします。
「インストールする製品の選択」の画面で、[Oracle Database Extensions for .NET 10.2.0.1.0]を選択して[次へ]をクリックします。
「ホームの詳細の指定」画面で、インストール先を指定します。ここで重要な点として、先ほどインストールした「Oracle Database Extensions for .NET 10.2.0.1.0」と同一のインストール先を指定してください。
Public Shared Function GetEmpName(ByVal empno As Integer) As String
'コネクションの確立
Dim conn As New OracleConnection("context connection=true")
conn.Open()
''SQLの発行と値の取得
Dim cmd As OracleCommand = conn.CreateCommand
cmd.CommandText = "SELECT ename FROM emp WHERE empno=:1"
cmd.Parameters.Add(":1", OracleDbType.Int32, empno, _
ParameterDirection.Input)
Dim rdr As OracleDataReader = cmd.ExecuteReader
Dim strRet As String
If rdr.Read Then
strRet = rdr.Item("ename")
Else
strRet = ""
End If
rdr.Close()
conn.Close()
Return strRet
End Function
「SCOTT」ユーザーの「EMP」表にアクセスするサンプル
public static string GetEmpName(int empno)
{
// コネクションの確立
OracleConnection conn =
new OracleConnection("context connection=true");
conn.Open();