Visual Studio 2005からPL/SQLプロシージャの開発
ODTの特長として、PL/SQLの開発・デバッグが行えることが挙げられます。[Oracleエクスプローラ]より、[プロシージャ]を右クリックし、[新規PL/SQLプロシージャ]を選択すると、PL/SQLの新規作成ウィンドウが表示されるので、以下の情報を入力してください。
項目 | 説明 |
スキーマ名 | SCOTT |
プロシージャ名 | GETEMPNAME |
認証識別子 | DEFINER |
パラメータ | 名前 PARAEMPNO, 方向 IN, データ型 NUMBER 名前 PARAENAME, 方向 OUT, データ型 VARCHAR2 |
PL/SQLコードエディタが開くので、SCOTTユーザーの「emp」テーブルを参照する簡単なPL/SQLプロシージャを次のように記述します。
PROCEDURE "SCOTT"."GETEMPNAME" ( "PARAMEMPNO" IN NUMBER, "PARAMENAME" OUT NVARCHAR2) IS BEGIN SELECT ename INTO paramename FROM emp WHERE empno=PARAMEMPNO; END "GETEMPNAME";
PL/SQLのコードエディタは、インテリセンスが有効になっているので、次のようにテーブルを指定すると、そのテーブルのフィールド一覧が表示されます。
コードミスが発生した場合は、「エラー一覧」としてメッセージが表示され、ダブルクリックすると、PL/SQLコードの該当行にカーソルが移動します。
次に作成したPL/SQLプロシージャをデバッグしてみましょう。まず「SCOTT」ユーザーにデバッグを行うための権限を与えます。管理ユーザーである「SYSTEM」ユーザーでOracleに接続し、以下のSQLを実行してデバッグ権限を「SCOTT」ユーザーに付与します。
C:\>sqlplus system/*******[SYSTEMユーザーパスワード] SQL> GRANT DEBUG CONNECT SESSION TO scott; 権限付与が成功しました。 SQL> GRANT DEBUG ANY PROCEDURE TO scott; 権限付与が成功しました。 SQL>
「SCOTT」ユーザーをOracleエクスプローラから選択し、[プロシージャ]-[GETEMPNAME]をダブルクリックするとPL/SQLエディターが開くので、任意の行でブレークポイントを設定します。
[Oracleエクスプローラ]から[プロシージャ]-[GETEMPNAME]を選択し、右クリックして[コンパイル・デバッグ]を選択します。[コンパイル・デバッグ]が完了したら、[デバッグの実行]を選択します。PL/SQLストアド・プロシージャを実行するためのパラメータ入力のウィンドウが表示されるので、任意の値(ここでは、7369)を入力し[OK]ボタンをクリックします。
先ほど設定したブレークポイントの箇所でコード実行が一時停止するので、後はVS 2005のデバッグ機能を利用して変数のウォッチやステップ実行をしながら、PL/SQLのプロシージャのデバッグができます。
以上のようにPL/SQLで記述されたプロシージャ、ファンクションを単独でデバッグすることも可能ですが、VS 2005で開発された.NETアプリケーションとシームレスに連携してデバッグすることも可能です。では、実際にテストしてみましょう。VS 2005から新規にWindowsアプリケーションを作成し、フォームにボタンを一つ貼り付けます。
次に、.NETからOracleへ接続するためのデータ・プロバイダであるODP.NETを、参照設定に追加します。ODP.NETの参照設定は、VS 2005のメニューより[プロジェクト]-[参照の追加]を選択し、.NETタブより[Oracle.DatAccess]を選択して行います。
フォームに貼り付けたボタンのClickイベントで先ほど作成したプロシージャを呼び出すコードを、次のように記述します。
Imports oracle.DataAccess.Client Imports oracle.DataAccess.Types Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'データベース接続 Dim conn As New OracleConnection( _ "User Id=Scott;Password=Tiger;Data Source=orcl10gr2") conn.Open() 'ストアドプロシージャの読込 Dim cmd As New OracleCommand("GETEMPNAME", conn) cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.Add("PARAEMPNO", OracleDbType.Int32 _ , ParameterDirection.Input) cmd.Parameters("PARAEMPNO").Value = 7369 cmd.Parameters.Add("PARAMENAME", OracleDbType.Varchar2 _ , 10, "", ParameterDirection.Output) cmd.ExecuteNonQuery() 'Close conn.Close() conn.Dispose() End Sub End Class
private void button1_Click(object sender, EventArgs e) { // データベース接続 OracleConnection conn = new OracleConnection( "User Id=Scott;Password=Tiger;Data Source=orcl10gr2"); conn.Open(); // ストアドプロシージャの読込 OracleCommand cmd = new OracleCommand("GETEMPNAME",conn); cmd.CommandType = CommandType.StoredProcedure; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("PARAEMPNO", OracleDbType.Int32 , ParameterDirection.Input); cmd.Parameters["PARAEMPNO"].Value = 7369; cmd.Parameters.Add("PARAMENAME", OracleDbType.Varchar2 , 10, "", ParameterDirection.Output); cmd.ExecuteNonQuery(); // Close conn.Close(); conn.Dispose(); }
次にVS 2005メニューの[ツール]-[Oracleアプリケーションのデバッグ]を選択します。
VS 2005メニューから[ツール]-[オプション]を選択し、オプションウィンドウを表示します。一覧から[Oracle Developer Tools]を選択し、[SCOTT.データソース名(SCOTT.orcl10gr2)]のチェックをオンにします。
オプションウィンドウの[OK]ボタンをクリックし、アプリケーションを実行します。[イミディエイト ウィンドウ]にはPL/SQLデバッガを起動するメッセージが表示されます。
フォーム上のボタンをクリックすると、PL/SQLストアド・プロシージャが実行され、ブレークポイントを設定した箇所で停止するのが確認できます。
後はVS 2005のデバッグ機能である、ステップ実行や変数のウォッチ機能を利用して、PL/SQLのコードをデバッグします。
おわりに
ODTではPL/SQLのデバッグなど、Oracleユーザーにとってうれしい機能が充実しています。VS 2005一つ立ち上げておくだけで、Oracle対応アプリケーション開発のほどんどの操作が行えます。今後、ODTの機能を詳細に紹介していきますので、どうぞご期待ください!
参考資料
- Oracle Technology Network 『.NET Developer Center』