ヘッダーをスキップ
Oracle Database 2日で.NET開発者ガイド
11gリリース2(11.2)
B56266-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

8 .NETストアド・プロシージャの開発とデプロイ

この章の内容は次のとおりです。

.NETストアド・プロシージャの概要

.NETストアド・プロシージャは、SQL文またはPL/SQL文を含む.NET言語で記述されたメソッドまたはプロシージャです。

カスタム・ストアド・プロシージャおよびファンクションは、C#やVB.NETなどの.NETに準拠した任意の言語を使用して記述できます。また、これらの.NETストアド・プロシージャは、他のPL/SQLストアド・プロシージャまたはJavaストアド・プロシージャと同様にデータベースで使用できます。.NETストアド・プロシージャは、PL/SQLパッケージ、プロシージャ、ファンクションおよびトリガーからコールできます。また、SQL文からコールすることも、PL/SQLプロシージャまたはファンクションをコールできる任意の場所からコールすることもできます。

この章の例を実行するには、Oracle Database Extensions for .NET(.NETストアド・プロシージャを記述できるデータベース・オプション)をデータベースにインストールして構成しておく必要があります。

この章では、.NETストアド・プロシージャをアプリケーションで使用およびデプロイする方法を説明します。

共通言語ランタイム・サービスの開始

.NETストアド・プロシージャを使用するには、最初に共通言語ランタイム・エージェント(OraClrAgentサービス)を開始する必要があります。このサービスはデフォルトでは開始されません。このサービスは、クライアント上ではなくOracle Database上にあることに注意してください。


注意:

OraClrAgntは、OracleOracleHomeNameClrAgntという名前で「コントロール パネル」の「サービス」からアクセスできます。OracleHomeNameはOracleホームです。

共通言語ランタイム・サービスを開始するには、次の手順を実行します。

  1. 「スタート」メニューから「すべてのプログラム」「管理ツール」「サービス」の順に選択します。

  2. 「サービス」ウィンドウで「拡張」タブをクリックします。

    サービスのリストをスクロールし、「OracleOracleHomeNameClrAgnt」を選択します。

  3. 「サービスの開始」ハイパーリンクをクリックします。

    「サービス コントロール」ウィンドウに、OracleClrAgentを開始していることが表示されます。

  4. 「サービス コントロール」ウィンドウが閉じたら、OracleClrAgentの状態が「開始」に変わっていることを確認します。

SYSDBAとしての接続の作成

次に、SYSDBAとしてデータベース接続を作成する必要があります。これにより、Oracleプロジェクトをデプロイできるようになります。


注意:

このタスクを実行するには、SYSDBAとしての管理者権限が必要です。


注意:

Enterprise Managerを使用してsysアカウントのパスワードを設定する場合は、『Oracle Database 2日でデータベース管理者』の管理者アカウントおよび管理者権限に関する項を参照してください。

ODTでデータベース接続を作成するには、次の手順を実行します。

  1. 「View」メニューから「Server Explorer」を選択します。

  2. Server Explorerで、「Data Connections」を右クリックします。

  3. 「Add Connection」を選択します。

  4. 「Add Connection」ウィンドウが表示されたら、「Data source」に「Oracle Database (Oracle ODP.NET)」と表示されているかどうかを確認します。

    表示されている場合は、手順6に進みます。

    addconnection1a.gifの説明が続きます。
    addconnection1a.gifの説明

    「Data source」に「Oracle Database (Oracle ODP.NET)」と表示されていない場合は、「Change」を選択します。

    「Change Data Source」ウィンドウが表示されます。

    addconnection2a.gifの説明が続きます。
    addconnection2a.gifの説明

  5. 「Oracle Database」を選択してから、「Oracle Data Provider for .NET」を選択します。

  6. 「Add Connection」ウィンドウでは、次のように指定します。

    • 「User name」にはsysと入力します。

    • 「Password」には、sysアカウントのロック解除および設定を行った管理者により設定されたパスワードを入力します。

      Enterprise Managerを使用してsysアカウントのパスワードを設定する場合は、『Oracle Database 2日でデータベース管理者』の管理者アカウントおよび管理者権限に関する項を参照してください。

    • 「Role」Sysdbaに設定されていることを確認します。

      「Connection name」「Data source name」および「User name」の値から自動生成されます。

      deploy03.gifの説明が続きます。
      deploy03.gifの説明

  7. 「Add Connection」ウィンドウで、「OK」をクリックします。

    これで、「Server Explorer」ウィンドウにSYS.ORCL接続が含まれます。

Oracleプロジェクトの作成

.NETでストアド・プロシージャを使用するには、ストアド・プロシージャを保持するための新しいOracleプロジェクトを最初に作成する必要があります。

.NETストアド・プロシージャ用のプロジェクトを作成するには、次の手順を実行します。

  1. 「File」メニューから「New」「Project」の順に選択します。

    「New Project」ダイアログ・ボックスが表示されます。

  2. 「Project Types」で、作成するプロジェクトの種類を選択します。

    • Visual C#:

      「Visual C#」「Database」の順に選択し、「Templates:」の下で「Oracle Project」を選択します。

      「Name:」HR_DeployStored_CSと入力します。

    • Visual Basic:

      「Other Languages」「Visual Basic」「Database」の順に選択し、「Templates:」の下で「Oracle Project」を選択します。

      「Name:」HR_DeployStored_VBと入力します。

  3. 「Location:」C:\HR_Projectsと入力します。

  4. 「OK」をクリックします。

    deploy01.gifの説明が続きます。
    deploy01.gifの説明

.NETストアド・ファンクションおよびプロシージャの作成

これで、.NETストアド・プロシージャを作成する準備ができました。

.NETストアド・プロシージャを作成するには、次の手順を実行します。

  1. 「Solution View」で、プロジェクトの「Class1.cs」タブまたは「Class1.vb」タブを選択します。

  2. 「名前空間ディレクティブの追加」の説明に従って、言語ごとに次の名前空間ディレクティブを追加します。

    Visual C#:

    using Oracle.DataAccess.Client;
    using Oracle.DataAccess.Types;
    
    
    
    

    Visual Basic:

    Imports Oracle.DataAccess.Client
    Imports Oracle.DataAccess.Types
    
  3. 「参照の追加」の説明に従って、Oracle.DataAccess.dllに参照を追加します。

  4. 次に示すように、getDepartmentno()メソッドをClass1宣言にコピーします。

    Visual C#

    public static int getDepartmentno(int employee_id)
    {
      int department_id = 0;
    
      // Get a connection to the db
      OracleConnection conn = new OracleConnection();
      conn.ConnectionString = "context connection=true";
      conn.Open();
    
      // Create and execute a command
      OracleCommand cmd = conn.CreateCommand();
      cmd.CommandText = "select department_id from employees where employee_id = :1";
      cmd.Parameters.Add(":1", OracleDbType.Int32, employee_id,
        ParameterDirection.Input);
      OracleDataReader rdr = cmd.ExecuteReader();
    
      while(rdr.Read())
        department_id=rdr.GetInt32(0);
    
      rdr.Close();
      cmd.Dispose();
    
      // Return the employee's department number
      return department_id;
    }
    

    Visual Basic:

    Public Shared Function getDepartmentno(ByVal employee_id As Integer) As Integer
      Dim department_id As Integer = 0
    
      ' Get a connection to the db
      Dim conn As OracleConnection = New OracleConnection()
      conn.ConnectionString = "context connection=true"
      conn.Open()
    
      ' Create and execute a command
      Dim cmd As OracleCommand = conn.CreateCommand()
      cmd.CommandText = "select department_id from employees where employee_id = :1"
      cmd.Parameters.Add(":1", OracleDbType.Int32, employee_id,     ParameterDirection.Input)
      Dim rdr As OracleDataReader = cmd.ExecuteReader()
    
      While rdr.Read()
        department_id = rdr.GetInt32(0)
    
      End While
    
      rdr.Close()
      cmd.Dispose()
    
      ' Return the employee's department number
      Return department_id
    
    End Function
    
    deploy04.gifの説明が続きます。
    deploy04.gifの説明

  5. Class1を保存します。

  6. 「Build」メニューから「Build Solution」を選択します。

    deploy05.gifの説明が続きます。
    deploy05.gifの説明

  7. 正しくビルドされたことが「Output」ウィンドウに示されていることを確認し、このウィンドウを閉じます。

.NETストアド・ファンクションおよびプロシージャのデプロイ

これまでの手順により、「.NETストアド・ファンクションおよびプロシージャの作成」で作成した.NETストアド・プロシージャをデプロイできる状態になっています。

.NETストアド・プロシージャをデプロイするには、次の手順を実行します。

  1. 「Build」メニューから「Deploy Solution」を選択します。

    deploy06.gifの説明が続きます。
    deploy06.gifの説明

    「.NET用のOracleデプロイメント・ウィザード」ウィンドウが表示されます。

  2. 「.NET用のOracleデプロイメント・ウィザード」ウィンドウで「次へ」をクリックします。

    deploy07.gifの説明が続きます。
    deploy07.gifの説明

  3. 「OracleConnectionを構成します」ウィンドウで「次へ」をクリックします。

    deploy08.gifの説明が続きます。
    deploy08.gifの説明

  4. 「デプロイメント・オプションを指定します」ウィンドウで、最初のオプション(「アセンブリをコピーしてストアド・プロシージャを生成」)が選択されていることを確認し、「次へ」をクリックします。

    deploy10.gifの説明が続きます。
    deploy10.gifの説明

  5. 「アセンブリおよびライブラリ名を指定します」ウィンドウでデフォルトを受け入れ、「次へ」をクリックします。

    deploy11.gifの説明が続きます。
    deploy11.gifの説明

  6. 「コピー・オプションの指定」ウィンドウでデフォルトを受け入れ、「次へ」をクリックします。

    Visual Basic:

    Visual Basicを使用している場合は、Microsoft.VisualBasicアセンブリも参照アセンブリとして表示されます。

    deploy12.gifの説明が続きます。
    deploy12.gifの説明

  7. 「メソッドおよびセキュリティ詳細の指定」ウィンドウで、「使用可能なメソッド」にある「HR_DeployStored_CS」または「HR_DeployStored_VB」を開き、「Class1」を開いて「getDepartmentno()」メソッドを選択します。

    「メソッドの詳細」で、スキーマ・リストから「HR」を選択します。

    「次へ」をクリックします。

    deploy13.gifの説明が続きます。
    deploy13.gifの説明

  8. 「サマリー」ウィンドウで「終了」をクリックします。

    deploy14.gifの説明が続きます。
    deploy14.gifの説明

.NETストアド・ファンクションおよびプロシージャの実行

これで、前の項でデプロイした.NETストアド・プロシージャを実行する準備ができました。

.NETストアド・プロシージャを実行するには、次の手順を実行します。

  1. Server Explorerで、HR.ORCL接続をオープンします。「Functions」を開きます。「GETDEPARTMENTNO」を右クリックして「Run」を選択します。

    deploy15.gifの説明が続きます。
    deploy15.gifの説明

    「Run Function」ウィンドウが表示されます。

  2. 「Run Function」ウィンドウで、「EMPLOYEE_ID」「Value」100を入力します。

    「OK」をクリックします。

    deploy16.gifの説明が続きます。
    deploy16.gifの説明

  3. 部門の戻り値が90であることを確認します。これは、EMPLOYEE_ID 100は部門90に含まれると示します。

    deploy17.gifの説明が続きます。
    deploy17.gifの説明

問合せウィンドウでの.NETストアド・プロシージャの実行

作成したばかりの.NETストアド・プロシージャは、Server Explorerから実行する他に、ODT問合せウィンドウを使用して実行することもできます。

  1. Server ExplorerでHR.ORCLスキーマを開きます。

  2. 「Functions」を開き、「GETDEPARTMENTNO」を選択します。

  3. 右クリックして「Query Window」を選択します。

  4. Select getdepartmentno(100) from dualと入力します。

  5. ツールバーから「Execute」をクリックします。

    querywindow.gifの説明が続きます。
    querywindow.gifの説明