ODE.NETを使ったプロシージャの開発とデバッグ.NETユーザー必見! Oracle 10gのお作法(3)(2/4 ページ)

» 2007年05月31日 00時00分 公開
[三谷亮太日本オラクル]

サンプル用にEMP表を変更する

 今回は以下の3つのストアドファンクションを作成します。

  • 入力された電子メールアドレスを正規表現でチェックする「ParseEmailAddress」
  • 電子メールアドレスをEMP表に登録する「EmailRegister」
  • EMP表をXMLファイルとして出力する「SerializeEmpData」

 このようにOracleデータベース側で、正規表現やXMLファイルへのシリアライズといった.NET Frameworkのクラスを利用することができるのも、.NETストアドプロシージャの大きな利点といえます。

 .NETストアドプロシージャを作成する前に、使用するEMP表に電子メールアドレスを格納するEMAIL列を追加します。OracleエクスプローラでEMP表を右クリックして[設計]を押下し(図7)、表1の内容を入力したらダイアログボックス右下の[保存]を押下します。

列名 Default 主キー
EMAIL VARCHAR2 (20)    -    -
表1 EMP表への変更項目
図7 OracleエクスプローラでEMP表を変更する 図7 OracleエクスプローラでEMP表を変更する

.NETストアドプロシージャの作成

 Visual Studio 2005を起動し、[ファイル]メニューから[新しいプロジェクト]を選択します。テンプレート一覧から[Oracle Project]を選択し、プロジェクト名を入力したら[OK]をクリックして作成します(図8)。

図8 新規にOracle Projectを作成する 図8 新規にOracle Projectを作成する

 .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
リスト2 必要なクラスをインポート(VB.NET)
C#のコードを表示する

 次に正規表現を使って、正しい電子メールアドレス形式かを確認する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
リスト3 ParseEmailAddress(正規表現を使って電子メールアドレスの形式を確認するファンクション、VB.NET)
C#のコードを表示する

 続いて正規表現チェック後に電子メールアドレスを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
リスト4 EmailRegister(メールアドレスチェック後に電子メールアドレスを登録するファンクション、VB.NET)
C#のコードを表示する

 最後に、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
リスト5 SerializeEmpData(EMP表のデータをXMLファイルとして出力するファンクション、VB.NET)
C#のコードを表示する

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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