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, parDateparBooleanコンスタントを渡すことによって関数かプロシージャー呼び出しの間に宣言されます。出力パラメーターの値は関数やプロシージャー呼び出しの後に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);