今回は以下の3つのストアドファンクションを作成します。
このようにOracleデータベース側で、正規表現やXMLファイルへのシリアライズといった.NET Frameworkのクラスを利用することができるのも、.NETストアドプロシージャの大きな利点といえます。
.NETストアドプロシージャを作成する前に、使用するEMP表に電子メールアドレスを格納するEMAIL列を追加します。OracleエクスプローラでEMP表を右クリックして[設計]を押下し(図7)、表1の内容を入力したらダイアログボックス右下の[保存]を押下します。
| 列名 | 型 | Default | 主キー |
|---|---|---|---|
| VARCHAR2 (20) | - | - | |
| 表1 EMP表への変更項目 | |||
Visual Studio 2005を起動し、[ファイル]メニューから[新しいプロジェクト]を選択します。テンプレート一覧から[Oracle Project]を選択し、プロジェクト名を入力したら[OK]をクリックして作成します(図8)。
.NETストアドプロシージャとしてデプロイするプロシージャやファンクションは、VB.NETの場合は「Public Shared」、C#の場合は「public static」で宣言されている必要があります。
まず、クラスに正規表現チェックを行うためのSystem.Text.RegularExpressionsとプロバイダ・ファクトリクラスを使用するためのSystem.Data.Commonをインポートします(リスト2)。
Imports Oracle.DataAccess.Client Imports Oracle.DataAccess.Types Imports System.Text.RegularExpressions Imports System.Data.Common
次に正規表現を使って、正しい電子メールアドレス形式かを確認するParseEmailAddressをPublic Shared Functionとして実装します(リスト3)。
Public Shared Function ParseEmailAddress(ByVal eMail As String) _
As Integer
Dim emailRegEx As New Regex("(\S+)@([^\.\s]+)(?:\.([^\.\s]+))+")
Dim m As Match = emailRegEx.Match(eMail)
If m.Success Then
Return 1
Else
Return 0
End If
End Function
続いて正規表現チェック後に電子メールアドレスをEMP表に登録するEmailRegisterを記述します。接続元からデータベース接続情報を引き継ぐため、「context connection=true」という設定を行っています。この記述で、接続元からトランザクションも引き継ぐことが可能です(リスト4)。
Public Shared Function EmailRegister(ByVal empNo As Integer, _
ByVal eMail As String) As Integer
Dim sql As String
Try
'正規表現チェック
If ParseEmailAddress(eMail) = 0 Then
Return 0
End If
Dim conn As New OracleConnection("context connection=true")
conn.Open()
Dim cmd As New OracleCommand
cmd.Connection = conn
cmd.CommandType = CommandType.Text
'パラメータはバインド変数で渡す
sql = "Update EMP set "
sql &= " EMAIL= :EMAIL"
sql &= " Where EMPNO = :EMPNO"
cmd.CommandText = sql
'パラメータ定義
Dim prmEMAIL As New OracleParameter
prmEMAIL.Value = eMail
cmd.Parameters.Add(prmEMAIL)
Dim prmEMPNO As New OracleParameter
prmEMPNO.Value = empNo
cmd.Parameters.Add(prmEMPNO)
'戻り値は行数(0は失敗)
Return cmd.ExecuteNonQuery()
Catch ex As Exception
Return 0
End Try
End Function
最後に、EMP表をXMLファイルとして出力するSerializeEmpDataを記述します(リスト5)。
Public Shared Function SerializeEmpData() As Integer
Dim sql As String
Try
Dim conn As New OracleConnection("context connection=true")
conn.Open()
Dim cmd As New OracleCommand
cmd.Connection = conn
cmd.CommandType = CommandType.Text
sql = "select * from emp "
cmd.CommandText = sql
Dim da As New OracleDataAdapter
Dim ds As New DataSet
da.SelectCommand = cmd
da.Fill(ds)
'出力先は環境に応じて変更してください
ds.WriteXml("C:\emp.xml")
Return 1
Catch ex As Exception
Return 0
End Try
End Function
Copyright © ITmedia, Inc. All Rights Reserved.