ヘッダーをスキップ
Oracle® Objects for OLE開発者ガイド
11gリリース2 (11.2) for Microsoft Windows
B58887-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

7 ストアド・プロシージャ用のコード・ウィザード

Oracle Objects for OLE(OO4O)のコード・ウィザードは、Oracle PL/SQLおよびJavaストアド・プロシージャを実行するOO4Oコードを生成します。

このウィザードは、既存のOracleストアド・プロシージャおよびパッケージから、Microsoft Visual BasicまたはActive Server PagesやVBScriptの個々のサブルーチンにコードを生成します。さらに、このウィザードでは、COMオートメーション・オブジェクトの完全な実装をVBクラス・ファイルの形式で生成できます。生成されたCOMオートメーション・オブジェクトのメソッドは、指定されたパッケージに含まれるストアド・プロシージャを実行するためのクライアント・スタブとして動作します。入出力パラメータのバインドおよびストアド・プロシージャの実行に必要なすべてのOO4Oコードが、自動的に生成されます。

このウィザードは、コマンドライン・ユーティリティまたはVisual Basicアドインとして使用できます。ウィザードによって、COMインタフェースを使用してストアド・プロシージャにアクセスする全プロセスが自動化されるため、開発時間とプログラム・エラーの可能性が大幅に減少します。


注意:

コード・ウィザードにはVisual Basic 6が必要です。

内容は次のとおりです。

Oracle Objects for OLEのコード・ウィザードのコンポーネント

OO4Oコード・ウィザードには、次のコンポーネントが含まれます。

  • コマンドライン・ユーティリティOO4OCodeWiz.exe。PL/SQLおよびJavaストアド・プロシージャをOO4Oコードに変換します。

  • PL/SQLおよびJavaストアド・プロシージャ用のOO4Oコードを生成する一連の手順を示すVisual Basicアドイン・ウィザード。このウィザードは、ユーザーがコードを生成するアイテムを選択できるように、Oracleパッケージおよびストアド・プロシージャをツリー・コントロールから表示します。

これら両方のコンポーネントによって、ユーザーは、ストアド・プロシージャ・パッケージ全体をOO4Oコードに変換できます。

OO4Oコード・ウィザードでサポートされているデータ型

コード・ウィザードでは、PL/SQL表を除き、すべてのデータ型がサポートされています。PL/SQL表を使用する場合、unsupportedTypeというキーワードが使用され、生成されたコードはコンパイルされません。

NULL値を処理するために、出力コードを修正する必要があります。たとえば、VB変数をパラメータ値で初期化する際、NULL値の使用が予想される場合はisNull()チェックを追加する必要があります。VariantおよびObject型のVB変数でNULLが正常に処理されるようになります。

OO4Oコード・ウィザードの使用方法

OO4Oコード・ウィザードは、コマンドライン・ユーティリティまたはVisual Basicアドインとして使用できます。

OO4Oコード・ウィザードのコマンドライン・ユーティリティ

OO4OCodeWiz.exeは、Oracle Database内の既存のPL/SQLまたはJavaストアド・プロシージャおよびパッケージから、Visual Basicクラス、Visual BasicファイルまたはActive Server Page/VB Scriptファイルを生成するコマンドライン・ユーティリティです。このユーティリティは次のようにコールします。

OO4OCodeWiz [-o output_file] username/password@connect_string package
変数 指定内容
username データベースへのログイン・ユーザー名
password ユーザー名のパスワード
connect_string データベース接続文字列
package パッケージ名
stored_procedure ストアド・プロシージャ名(オプション)

OO4OCodeWiz -o empfile.asp scott/tiger@Exampledb employee.example 

オプション

オプション 説明
-o 出力ファイル名を指定します(オプション)。

生成ファイル

コード・ウィザードではコマンドラインで指定した情報を使用して、生成する出力ファイルのタイプを決定します。

ファイル名および使用可能ないずれかのファイル拡張子が指定されている場合は、それらが使用されます。前述の例では、empfile.asp出力でASPファイルが生成されます。ユーザーは、次の拡張子を指定できます。

拡張子 生成されるファイルのタイプ
.cls VBクラス・ファイル
.bas VBファイル
.asp ASPまたはVBScriptファイル
.vbs ASPまたはVBScriptファイル

ファイル拡張子が指定されていない場合、他のコマンドライン仕様に基づいて生成されるファイルのタイプは次の規則に従います。

  • ストアド・プロシージャ名がないパッケージ名の場合は.clsファイルが生成されます。

  • プロシージャ名があるパッケージ名の場合は.basファイルが生成されます。

表7-1および表7-2に例を示します。

表7-1 ストアド・プロシージャ名がないパッケージ名の場合

指定したファイル コマンド 生成されるファイルのタイプ

ファイル拡張子のないファイル名を指定すると、filename.clsが生成されます。

OO4OCodeWiz -o empfile scott/tiger@Exampledb employee

empfile.cls

ファイル名も拡張子も指定しないと、packagename.clsが生成されます。

OO4OCodeWiz scott/tiger@Exampledb employee

employee.cls

ファイル拡張子付きのファイル名を指定すると、filename.fileextenが生成されます。

OO4OCodeWiz -o empfile.asp scott/tiger@Exampledb employee

empfile.asp


表7-2 ストアド・プロシージャ名があるパッケージ名の場合

指定したファイル コマンド 生成されるファイルのタイプ

ファイル拡張子のないファイル名を指定すると、filename.basが生成されます。

OO4OCodeWiz -o empfile scott/tiger@Exampledb employee.example

empfile.bas

ファイル名も拡張子も指定しないと、packagename.basが生成されます。

OO4OCodeWiz scott/tiger@Exampledb employee.example

employee.bas

ファイル拡張子付きのファイル名を指定すると、filename.fileextenが生成されます。

OO4OCodeWiz -o empfile.asp scott/tiger@Exampledb employee.example

empfile.asp


OO4Oコード・ウィザードのVisual Basicウィザード・アドイン

  1. Microsoft Visual Basicの「Add-Ins」メニューで「Oracle Code Wizard for Stored Procedures」を選択し、OO4Oコード・ウィザードを起動します。

    「Connect To Oracle Database」ダイアログ・ボックスが表示されます。

    「Connect」ダイアログ・ボックス
    画像connect.gifの説明

  2. データベースに接続するためのユーザー名とパスワードを入力します。ユーザーのローカル・コンピュータにデータベースがインストールされていない場合は、接続文字列が必要です。

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

    ユーザーが使用可能なOracleパッケージおよびストアド・プロシージャがツリーに表示されます。

    「OO4O Code Wizard for Stored Procedures」ダイアログ・ボックス
    画像wizproc.gifの説明

  4. 表示されたストアド・プロシージャまたはパッケージの1つを選択します。

  5. 出力ファイル名を入力するか、「Browse...」ボタンをクリックして、ファイルを配置する別のディレクトリに移動します。

  6. 「Component type」リストからファイルのタイプを選択します。VBクラス・モジュール(*.cls)、VBファイル(*.bas)またはその他の3つの選択肢があります。その他(otherオプション)を選択した場合は、VBファイル(*.bas)が生成されますが、独自のファイル拡張子を指定できます。

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

    新規のOO4Oファイルが作成されたことを知らせるダイアログ・ボックスが表示されます。

  8. 「Yes」をクリックして別のファイルを作成するか、「No」をクリックしてVisual Basicに戻ります。

コード・ウィザードの例

ORACLE_BASE\\ORACLE_HOME\oo4o\codewiz\samplesディレクトリには、ウィザードで生成されたコードを組み込んだサンプル・アプリケーションがあります。次の各例では、OO4Oコード・ウィザードを使用してOracleストアド・プロシージャから生成されたVBコード出力を示します。

Visual BasicおよびActive Server PagesによるPL/SQLストアド・ファンクションへのアクセス

この例では、PL/SQLストアド・ファンクションGetEmpSal、およびこのストアド・ファンクションに対してコード・ウィザードで生成されるVisual Basicファイル(*.cls)を示します。

FUNCTION GetEmpSal (inEmpno IN NUMBER)
RETURN NUMBER is 
  outEmpsal NUMBER(7,2);
BEGIN 
  SELECT SAL into outEmpsal from EMP WHERE EMPNO = inEmpno;
  RETURN (outEmpsal);
END;

GetEmpSalストアド・ファンクションに対して生成されるコードは次のようになります。

Public Function GETEMPSAL(INEMPNO As Variant) As Variant 
OraDatabase.Parameters.Add "INEMPNO", INEMPNO, ORAPARM_INPUT, 2 
OraDatabase.Parameters.Add "result", 0, ORAPARM_OUTPUT 
OraDatabase.Parameters("result").serverType = 2 
OraDatabase.ExecuteSQL ("declare result Number; Begin :result := " & _
              "Employee.GETEMPSAL(:INEMPNO); end;")  
 
OraDatabase.Parameters.Remove "INEMPNO" 
GETEMPSAL = OraDatabase.Parameters("result").Value 
OraDatabase.Parameters.Remove "result" 
End Function 

VBクラスでは、OraDatabaseはクラスの属性として表されます。この属性は、クラスのメソッドがコールされる前に設定する必要があります。VBファイル(*.bas)の場合、GetEmpSalストアド・ファンクションに対して生成されるコードは、関数の宣言を除き、VBクラス・ファイルの場合と同じです。

Public Function GETEMPSAL(INEMPNO As Variant, ByRef OraDatabase As OraDatabase)
... 
 
End Function 

ASPファイル(*.asp)の場合も、GetEmpSalストアド・ファンクションに対する関数の宣言が次のように異なりますが、コード本体は同じです。

Public Function GETEMPSAL(INEMPNO, ByRef OraDatabase) 
... 
End Function 

Visual Basicによる、LOB型を使用したPL/SQLストアド・プロシージャへのアクセス

次の例では、Visual Basicファイルが、LOBを使用したPL/SQLストアド・プロシージャにアクセスする方法を示します。

PROCEDURE getchapter(chapno in NUMBER, chap out CLOB) is
BEGIN 
SELECT chapters into chap from mybook where chapterno = chapno
   for update;
END;

GETCHAPTERストアド・プロシージャに対して生成されるVisual Basicコードは次のようになります。

Public Sub GETCHAPTER(CHAPNO As Variant, ByRef CHAP As OraCLOB) 
OraDatabase.Parameters.Add "CHAPNO", CHAPNO, ORAPARM_INPUT, 2 
OraDatabase.Parameters.Add "CHAP", Null, ORAPARM_OUTPUT, 112 
OraDatabase.ExecuteSQL ("Begin MYBOOKPKG.GETCHAPTER(:CHAPNO,:CHAP); end;") 
Set CHAP = OraDatabase.Parameters("CHAP").Value 
OraDatabase.Parameters.Remove "CHAPNO" 
OraDatabase.Parameters.Remove "CHAP" 
End Sub 

Visual Basicによる、VARRAY型を使用したPL/SQLストアド・プロシージャへのアクセス

次の例では、PL/SQLストアド・プロシージャでOracleコレクション型のVARRAYを使用する方法を示します。

PROCEDURE getnames(deptid in NUMBER, name out ENAMELIST) is 
BEGIN 
    SELECT ENAMES into name from department where dept_id = deptid for update; 
END;
 

ウィザードでは、このストアド・プロシージャに対して次のVisual Basicコードが生成されます。

Public Sub GETNAMES(DEPTID As Variant, ByRef NAME As OraCollection) 
OraDatabase.Parameters.Add "DEPTID", DEPTID, ORAPARM_INPUT, 2 
OraDatabase.Parameters.Add "NAME", Null, ORAPARM_OUTPUT, 247, "ENAMELIST" 
OraDatabase.ExecuteSQL ("Begin DEPTPKG.GETNAMES(:DEPTID, :NAME); end;") 
Set NAME = OraDatabase.Parameters("NAME").Value 
OraDatabase.Parameters.Remove "DEPTID" 
OraDatabase.Parameters.Remove "NAME" 
End Sub 

Visual Basicによる、Oracleオブジェクト型を使用したPL/SQLストアド・プロシージャへのアクセス

次の例では、PL/SQLストアド・プロシージャでOracleオブジェクト型を使用する方法を示します。

PROCEDURE getaddress(person_name in varchar2, person_address out address) is 
BEGIN 
     SELECT addr into person_address from person_table where name = 
           person_name for update; 
END; 

ウィザードでは、このストアド・プロシージャに対して次のVisual Basicコードが生成されます。

Public Sub GETADDRESS(PERSON_NAME As String, ByRef PERSON_ADDRESS As OraObject)
OraDatabase.Parameters.Add "PERSON_NAME", PERSON_NAME, ORAPARM_INPUT, 1 
OraDatabase.Parameters.Add "PERSON_ADDRESS", Null, ORAPARM_OUTPUT, _ 
            108, "ADDRESS" 
OraDatabase.ExecuteSQL ("Begin PERSONPKG.GETADDRESS(:PERSON_NAME," & _  
            ":PERSON_ADDRESS); end;") 
Set PERSON_ADDRESS = OraDatabase.Parameters("PERSON_ADDRESS").Value 
OraDatabase.Parameters.Remove "PERSON_NAME" 
OraDatabase.Parameters.Remove "PERSON_ADDRESS" 
End Sub