HIRO's.NET

VB.NET, C#, PowerShell Tipsサイト

 VB.NET, C#, PowerShellを使用しているエンジニアのためのサイト。

 基本的な使用方法から開発で役立つTipsまで幅広く取り扱っています。

HIRO's.NET RSSHIRO's.NET RSS


C# 2005の開発でお困りのことはありませんか?
そんな悩みは当サイトで解決!!

HOME > C# 2005 Tips > その他 Tips メニュー> ストアド操作 ODP.NET編 Tips メニュー

06.ストアドファンクション操作

UPDATE:2007/04/22 

<< 前のTips  次のTips >>

 


その1~その5までは、OracleのストアドプロシージャをC#から使用する方法を紹介しました。

今回は、OracleのストアドファンクションをVB.NETから呼び出す方法を紹介します。

使用するテーブルは、Oracleを使用している人であればおなじみの、scott/tigerのEMP表です。

ストアドファンクションは下記の通りです。呼び出すと777と言う数値を返すだけのものです。
(例によって深い意味はありません。説明用です。)

■ストアドファンクション
CREATE OR REPLACE FUNCTION SCOTT.FUNCTION1
RETURN NUMBER -- 戻り値のデータ型
IS
BEGIN
    return (777);
END;
/

 まず、OracleParameterのインスタンスを作成します。

 OracleParameterのインスタンス作成時の第1引数には、適当に名前を付けた値を指定します。(今回は戻り値を受け取るという意味合いをこめて"retVal"としています)。第2引数にはストアドファンクションの戻り値であるNumber型に対応する型を指定します。(OracleDbType.Decimal)

 次に、ExecuteNonQueryを実行し、作成しておいたOracleParameterのインスタンス(retVal)のValueプロパティを参照することで、ストアドファンクションの戻り値を取得することができます。

 
サンプル
private void ODP_FUNCTION1()
{
    try
    {
        using (OracleConnection OraConn = 
            new OracleConnection("user id=scott;password=tiger;data source=aicnet01"))
        {
            using (OracleCommand Cmd = new OracleCommand())
            {
                //データベース接続を開く
                OraConn.Open();
                Cmd.Connection = OraConn;
                //コマンドタイプをストアドファンクションにする
                Cmd.CommandType = CommandType.StoredProcedure;
                //実行するストアドプロシージャを指定
                Cmd.CommandText = "FUNCTION1";
                //ストアドファンクションの戻り値パラメータ作成
                OracleParameter retVal = new OracleParameter("retVal", OracleDbType.Decimal);
                retVal.Direction = ParameterDirection.ReturnValue;
                Cmd.Parameters.Add(retVal);

                //ストアドファンクションの実行
                Cmd.ExecuteNonQuery();

                MessageBox.Show(
                    "FUNCTION1 正常終了 戻り値=" + retVal.Value.ToString(),
                    "SUCCESS",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
            }
        }
    }
    catch (OracleException OraEx)
    {
        // Oracle例外発生時
        MessageBox.Show(OraEx.Message, "ORACLE ERROR", MessageBoxButtons.OK, MessageBoxIcon.Stop);
    }
    catch (Exception ex)
    {
        // 一般例外発生時
        MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Stop);
    }
}
 

<< 前のTips  次のTips >>