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が必要です。 |
内容は次のとおりです。
OO4Oコード・ウィザードには、次のコンポーネントが含まれます。
コマンドライン・ユーティリティOO4OCodeWiz.exe
。PL/SQLおよびJavaストアド・プロシージャをOO4Oコードに変換します。
PL/SQLおよびJavaストアド・プロシージャ用のOO4Oコードを生成する一連の手順を示すVisual Basicアドイン・ウィザード。このウィザードは、ユーザーがコードを生成するアイテムを選択できるように、Oracleパッケージおよびストアド・プロシージャをツリー・コントロールから表示します。
これら両方のコンポーネントによって、ユーザーは、ストアド・プロシージャ・パッケージ全体をOO4Oコードに変換できます。
コード・ウィザードでは、PL/SQL表を除き、すべてのデータ型がサポートされています。PL/SQL表を使用する場合、unsupportedType
というキーワードが使用され、生成されたコードはコンパイルされません。
NULL
値を処理するために、出力コードを修正する必要があります。たとえば、VB変数をパラメータ値で初期化する際、NULL
値の使用が予想される場合はisNull()
チェックを追加する必要があります。Variant
およびObject
型のVB変数でNULL
が正常に処理されるようになります。
OO4Oコード・ウィザードは、コマンドライン・ユーティリティまたはVisual Basicアドインとして使用できます。
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 ストアド・プロシージャ名があるパッケージ名の場合
指定したファイル | コマンド | 生成されるファイルのタイプ |
---|---|---|
ファイル拡張子のないファイル名を指定すると、 |
|
|
ファイル名も拡張子も指定しないと、 |
|
|
ファイル拡張子付きのファイル名を指定すると、 |
|
|
Microsoft Visual Basicの「Add-Ins」メニューで「Oracle Code Wizard for Stored Procedures」を選択し、OO4Oコード・ウィザードを起動します。
「Connect To Oracle Database」ダイアログ・ボックスが表示されます。
データベースに接続するためのユーザー名とパスワードを入力します。ユーザーのローカル・コンピュータにデータベースがインストールされていない場合は、接続文字列が必要です。
「OK」をクリックします。
ユーザーが使用可能なOracleパッケージおよびストアド・プロシージャがツリーに表示されます。
表示されたストアド・プロシージャまたはパッケージの1つを選択します。
出力ファイル名を入力するか、「Browse...」ボタンをクリックして、ファイルを配置する別のディレクトリに移動します。
「Component type」リストからファイルのタイプを選択します。VBクラス・モジュール(*.cls
)、VBファイル(*.bas
)またはその他の3つの選択肢があります。その他(otherオプション)を選択した場合は、VBファイル(*.bas
)が生成されますが、独自のファイル拡張子を指定できます。
「OK」をクリックします。
新規のOO4Oファイルが作成されたことを知らせるダイアログ・ボックスが表示されます。
「Yes」をクリックして別のファイルを作成するか、「No」をクリックしてVisual Basicに戻ります。
ORACLE_BASE\\ORACLE_HOME
\oo4o\codewiz\samples
ディレクトリには、ウィザードで生成されたコードを組み込んだサンプル・アプリケーションがあります。次の各例では、OO4Oコード・ウィザードを使用してOracleストアド・プロシージャから生成されたVBコード出力を示します。
この例では、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ストアド・プロシージャにアクセスする方法を示します。
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
次の例では、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
次の例では、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