PASSTHRU 関数は、式を評価し、その結果の文字ストリングをデータベース・ステートメントとして実行して結果セットを戻します。
PASSTHRU 関数は PASSTHRU ステートメントに似ています。このステートメントについては、PASSTHRU ステートメントで説明されています。
PASSTHRU 関数の主な使用法としては、現在ブローカーでサポートされていない複雑な SELECT をデータベースに対して発行することがあります。(現在ブローカーでサポートされていない複雑な SELECT の例としては、GROUP BY 文節や HAVING 文節を含む SELECT があります。)
最初の式が評価され、その結果の文字ストリングは、(TO 文節中の) DatabaseReference で指されているデータベースに渡されて実行されます。TO 文節を指定しないと、ノードの「データ・ソース」属性によって指されているデータベースが使用されます。
データベース・ストリング中で疑問符 (?) を使用してパラメーターを示します。パラメーター値は VALUES 文節によって提供されます。
VALUES 文節を指定すると、その式が評価され、パラメーターとしてデータベースに渡されます (つまり、その式の値がデータベース・ステートメント中の疑問符と置換されます)。
VALUE 式が 1 つしかない場合、結果はリストになる場合もならない場合もあります。 リストになる場合は、リストのスカラー値が順番に疑問符と置換されます。リストにならない場合は、単一のスカラー値がデータベース・ステートメント中の (単一の) 疑問符と置換されます。複数の VALUE 式がある場合は、 どの式もリストに評価されず、代わりに式のスカラー値が順番に疑問符と置換されます。
データベース・ステートメントはユーザー・プログラムによって構成されるので、 パラメーター・マーカー (つまり疑問符) または VALUES 文節を使用することは重要ではありません。 なぜなら、そのプログラムによってデータベース・ステートメント全体をリテラル・ストリングとして提供できるからです。 しかし、パラメーター・マーカーを使用すると、さまざまなステートメントを作成してデータベースやブローカーに保管する必要が少なくなるので、使用可能な場合は必ずパラメーター・マーカーを使用してください。
データベース参照は、メッセージ・ツリーの参照に使用されるフィールド参照の特殊なインスタンスです。この参照は、Database という語と、その後のデータ・ソースの名前 (つまり、データベース・インスタンスの名前) から成ります。
データ・ソース名は直接指定するか、または式を中括弧 ({...}) で囲んで指定できます。直接指定したデータ・ソース名は、名前置換の対象になります。つまり、使用している名前が既知の名前になるよう宣言されている場合、名前自体ではなく宣言済みの名前の値が使用されます (DECLARE ステートメントを参照)。
PASSTHRU 操作中にエラーが起きる可能性があります。例えば、データベースが操作可能でなくなったり、ステートメントが無効だったりする場合があります。その場合 (ノードの「データベース・エラーで例外をスロー」プロパティーがクリアされているのでない限り)、 例外がスローされます。 これらの例外は、該当する SQL コード、状態、ネイティブ・エラー、およびエラー・テキストの値を設定し、エラー・ハンドラーで処理できます (DECLARE HANDLER ステートメントを参照)。
データベース・エラーの処理について詳しくは、データベース状態のキャプチャーを参照してください。
SET OutputRoot.XML.Data.SelectResult.Row[] = PASSTHRU('SELECT R.* FROM Schema1.Table1 AS R WHERE R.Name = ? OR R.Name = ? ORDER BY Name' TO Database.DSN1 VALUES ('Name1', 'Name4'));
上記の例では、汎用 XML パーサーが所有する OutputRoot メッセージ本体ツリーに結果セットを割り当てます。このパーサーは自己定義メッセージを処理できます。
MRM パーサーの 1 つが所有するメッセージ・ツリーに結果セットを割り当てる際に、結果セットの構造が MRM メッセージ定義と正確に一致する場合は、その結果セットを直接 OutputRoot メッセージ本体ツリーに割り当てることができます。
結果セットの構造が MRM メッセージ定義と正確に一致しない場合は、最初に結果セットを ROW データ・タイプか、パーサーに関連付けられていない Environment ツリーに割り当てなければなりません。その後、必要なデータを OutputRoot に割り当て、メッセージ定義に準拠するメッセージ・ツリーを構築できます。