|
Example - Using a package |
Top Previous Next |
|
TOraclePackageコンポーネントを説明するために、このサンプルは標準パッケージsys.dbms_pipeを使っています。 このアプリケーションはメッセージパイプを読み、全てのメッセージをメモに表示します。 パッケージを宣言する dbms_pipe packageを使うために、TOraclePackage コンポーネントを作り、Session プロパティを適切なセッションに設定し、PackageNameプロパティを'dbms_pipe' (か、もしパブリックシノニムが存在しないなら'sys.dbms_pipe')に設定、そしてNameプロパティをDbmsPipeに設定します。 このサンプルでは、名前つきプロパティを使い、ParameterModeプロパティをpmNamedに設定します。 関数を呼び出す パイプ'demo_pipe'にあるメッセージを受け取るために、dbms_pipe.receive_message を呼び出し、パイプの名前と60秒というタイムアウトの値を渡すためにCall...Functionメソッドを呼び出す必要があります。関数の結果はメッセージ、タイムアウト、もしくはエラーを受け取ったかどうかを示します: with DbmsPipe do try Status := CallIntegerFunction('receive_message', ['pipename', 'demo_pipe', 'timeout', 60]); case Status of 0: AddMessageToMemo; 1: ShowMessage('Timeout'); 2: ShowMessage('Record in pipe too big for buffer'); 3: ShowMessage('Interrupted'); end; except on E:EOracleError do ShowMessage(E.Message); end;
パラメーター名 ('pipename' and 'timeout')と値 ('demo_pipe' and 60)はオープン配列コンストラクターとして直接渡されます。値の型は暗示的にパラメーターの型を宣言します。もし関数が一切パラメーターを持たない場合、Delphiには空のオープン配列コンストラクター[]が存在しないのでparNone定数を使う必要があります: s := DbmsPipe.CallStringFunction('unique_session_name', parNone);
出力パラメーター パラメーターはオープン配列コンストラクターとして渡されるので、出力または入出力パラメーターはパラメーターはサポートされていません。出力パラメーターは、値の代わりにparString, parInteger, parFloat, parDateかparBooleanコンスタントを渡すことによって関数かプロシージャー呼び出しの間に宣言されます。出力パラメーターの値は関数やプロシージャー呼び出しの後にGetParameter メソッドで取得されます。 サンプルでは、メッセージから文字列アイテムを得るためにdbms_pipe.unpack_messageプロシージャーを呼び出す必要があります: with DbmsPipe do try CallProcedure('unpack_message', ['item', parString]); Memo.Items.Add(GetParameter(0)); except on E:EOracleError do ShowMessage(E.Message); end;
入出力パラメータに関して、 それの入力に割り当てられている値の型は暗示的にパラメーターの型を宣言します。もしまだ型のついていない入出力パラメーターにnullを渡したいなら、Nullの代わりにpar...定数を使ってください。 パッケージ化された変数と定数 変数や定数の値を得るためにはGet...Variableメソッドを使うことが出来ます: MaxWait := DbmsPipe.GetIntegerVariable('maxwait');
変数の値を設定するためにはSetVariable メソッドを使ってください: MyPackage.SetVariable('factor', 12.55);
|