目次

Search

  1. はじめに
  2. トランスフォーメーションに関する作業
  3. アグリゲータトランスフォーメーション
  4. カスタムトランスフォーメーション
  5. カスタムトランスフォーメーション関数
  6. データマスキングトランスフォーメーション
  7. データマスキングの例
  8. 式トランスフォーメーション
  9. エクスターナルプロシージャトランスフォーメーション
  10. フィルタトランスフォーメーション
  11. HTTPトランスフォーメーション
  12. ID解決トランスフォーメーション
  13. Javaトランスフォーメーション
  14. JavaトランスフォーメーションAPIのリファレンス
  15. Java式
  16. Javaトランスフォーメーションの例
  17. ジョイナトランスフォーメーション
  18. ルックアップトランスフォーメーション
  19. ルックアップキャッシュ
  20. 動的ルックアップキャッシュ
  21. ノーマライザトランスフォーメーション
  22. ランクトランスフォーメーション
  23. ルータトランスフォーメーション
  24. シーケンスジェネレータトランスフォーメーション
  25. ソータトランスフォーメーション
  26. ソース修飾子トランスフォーメーション
  27. SQLトランスフォーメーション
  28. マッピングにおけるSQLトランスフォーメーションの使用
  29. ストアドプロシージャトランスフォーメーション
  30. トランザクション制御トランスフォーメーション
  31. 共有体トランスフォーメーション
  32. 構造化されていないデータのトランスフォーメーション
  33. アップデートストラテジトランスフォーメーション
  34. XMLトランスフォーメーション

トランスフォーメーションガイド

トランスフォーメーションガイド

式からストアドプロシージャを呼ぶ場合

式からストアドプロシージャを呼ぶ場合

コネクトされていないマッピングでは、ストアードプロシージャトランスフォーメーションはパイプラインに接続されません。
以下の図に、ストアードプロシージャトランスフォーメーションを参照する式トランスフォーメーションとのマッピングを示します。
マッピングには、ソース、ソース修飾子、式トランスフォーメーション、ターゲット、および接続されていないストアドプロシージャトランスフォーメーションが含まれます。
ただし、接続されたマッピングの場合と同様に、マッピングを介してストアドプロシージャをデータフローに適用することができます。むしろ、式を使用してストアドプロシージャを呼び出すということは入力パラメータとしてストアドプロシージャに渡すデータを選択できることを意味するため、柔軟性がさらに高まります。
式の中でコネクトされていないストアードプロシージャトランスフォーメーションを使用している場合は、出力パラメータの値をポートに返す手段が必要となります。以下のいずれかの方法を使って出力値を取得します。
  • 出力値をローカル変数に割り当てる。
  • 出力値をシステム変数PROC_RESULTに割り当てる。
PROC_RESULTを使用することにより、戻りパラメータの値を直接出力ポートに割り当て、それを直接ターゲットに割り当てることができます。また、この2つのオプションを組み合わせて、1つの出力パラメータをPROC_RESULTに割り当て、他のパラメータを変数として割り当てることもできます。
PROC_RESULTは、式の中でのみ使用します。PROC_RESULTも変数も使用しない場合、その式を含むポートはNULLを取得します。PROC_RESULTは、接続されたルックアップトランスフォーメーション内やストアードプロシージャトランスフォーメーションの[Call Text]内で使用することはできません。
ストアドプロシージャをネストして、1つのストアドプロシージャの出力パラメータを別のストアドプロシージャに渡す場合は、PROC_RESULTを使ってその値を渡します。
Integration Serviceは、式トランスフォーメーションから接続されていないストアドプロシージャトランスフォーメーションを呼び出します。 ストアードプロシージャトランスフォーメーションに2つの入力ポートと1つの出力ポートがあることに注意してください。これらの3つのポートはすべてStringデータタイプです。
式からストアドプロシージャを呼び出すには:
  1. マッピング内にストアードプロシージャトランスフォーメーションを作成します。
  2. 出力ポートと変数ポートをサポートする任意のトランスフォーメーション内で、ストアドプロシージャを呼び出す新しい出力ポートを作成します。出力ポートに名前を付けます。
    ストアドプロシージャを呼び出す出力ポートは、式をサポートしていなければなりません。式をどのように設定するかによって、出力ポートが出力パラメータの値または戻り値のどちらを含むかが決まります。
  3. そのポートに対して式のエディタを開きます。
    式のエディタ内でトランスフォーメーション言語の:SPキーワードを使用して、新しいポートの値をストアドプロシージャ呼び出しとして設定します。これを適切に設定する最も簡単な方法は、式エディタ内で[ストアドプロシージャ]ノードを選択し、一覧表示されているストアードプロシージャトランスフォーメーションの名前をクリックすることです。標準の接続されたストアドプロシージャをこの関数リストに表示させるためには、入力ポートと出力ポートがそれぞれ1つ以上なければなりません。
    式のエディタ内に、一対の空のかっこと共にストアドプロシージャが表示されます。必要な入力パラメータや出力パラメータが、式のエディタの左下部分に表示されます。
  4. 入力パラメータを渡して出力パラメータまたは戻り値を取得するように式を設定します。
    その際、式のエディタに表示されているパラメータが入力パラメータであるか出力パラメータであるかがわかっている必要があります。変数またはポート名を、ストアドプロシージャに表示される順序でかっこ内に挿入します。ポートおよび変数のデータタイプは、ストアドプロシージャに渡されるパラメータのデータタイプと一致しなければなりません。
    たとえば、ストアドプロシージャをクリックすると次のような表示が現れます。
    :SP.GET_NAME_FROM_ID()
    このストアドプロシージャは入力パラメータとして整数値を取り、出力パラメータとして文字列値を返すとします。出力パラメータまたは戻り値がどのように取得されるかは、出力パラメータの数や、戻り値を取得する必要があるかどうかに応じて変わります。
    ストアドプロシージャが1つの出力パラメータまたは戻り値(両方ではない)を返すのであれば、予約変数PROC_RESULTを出力変数として使用します。上記の例では、次のような式になります。
    :SP.GET_NAME_FROM_ID(inID, PROC_RESULT)
    inIDは、トランスフォーメーションの入力ポートまたは変数です。PROC_RESULTの値が式の出力ポートに適用されます。
    ストアドプロシージャが複数の出力パラメータを返す場合は、それぞれの出力パラメータのための変数を作成しなければなりません。たとえばストアドプロシージャ式に対してvarOUTPUT2というポートとvarOUTPUT1という変数を作成した場合、この式は次のようになります。
    :SP.GET_NAME_FROM_ID(inID, varOUTPUT1, PROC_RESULT)
    2番目の出力ポートの値は式の出力ポートに適用され、最初の出力ポートの値はvarOUTPUT1に適用されます。出力パラメータは、ストアドプロシージャ内で宣言された順序で返されます。
    これらの式において、ポートおよび変数のデータタイプは、入出力変数および戻り値のデータタイプにすべて一致しなければなりません。
  5. [検証]をクリックして式を検査します。次に[OK]をクリックして式のエディタを閉じます。
    式を検証することによって、ストアドプロシージャ内のパラメータのデータタイプが式のパラメータのデータタイプと一致していることが保証されます。
  6. [OK]をクリックします。
    マッピングを保存する際、Designerはストアドプロシージャ式を検証しません。ストアドプロシージャの式の設定が正しくない場合、セッションは失敗します。ストアドプロシージャを使用するマッピングをテストする場合は、[Override Tracing]セッションオプションをVerboseモードに設定し、ストアドプロシージャが失敗した場合に実行を停止するように[On Stored Procedure]セッションオプションを設定します。これらのセッションオプションは、セッションプロパティの[設定オブジェクト]タブの[Error Handling]設定で設定します。
ポートに対して入力された式内のストアドプロシージャは、そのポートを通過するすべての値に作用する必要はありません。たとえばIIF文を使用して、5から始まるID番号のような特定の値だけをストアドプロシージャに渡し、それ以外の値はスキップするように設定することができます。また、ネストしたストアドプロシージャを設定して、1つのストアドプロシージャの戻り値を2番目のストアドプロシージャの入力パラメータとすることもできます。