ストアドプロシージャまたはストアド関数の処理 Microsoft SQL Server、MySQL、ODBC、Oracle、PostgreSQL、Redshift V2、またはSnowflakeデータベース内のストアドプロシージャまたはストアド関数を呼び出すには、SQLトランスフォーメーションを使用します。ストアドプロシージャまたはストアド関数は、SQLトランスフォーメーションを作成する前にデータベースに存在している必要があります。
次のタイプのSQLトランスフォーメーションを使用して、ストアドプロシージャまたはストアド関数を呼び出すことができます。
接続されたSQLトランスフォーメーション トランスフォーメーションがマッピングパイプラインに接続されています。ストアドプロシージャまたはストアド関数は行ごとに実行され、単一の出力パラメータまたは複数の出力パラメータを返します。 SQLトランスフォーメーションの受信フィールドをストアドプロシージャの入力フィールドにマッピングできます。SQLトランスフォーメーションの出力フィールドは、ストアドプロシージャの出力パラメータまたは戻り値で構成されます。
戻り値は、ストアドプロシージャに定義したコードまたはテキスト文字列です。例えば、ストアドプロシージャは実行された日付を示す値を返すことができます。ストアドプロシージャに戻り値がある場合、SQLトランスフォーメーションには戻り値フィールドがあります。
未接続のSQLトランスフォーメーション SQLトランスフォーメーションがマッピングパイプラインに接続されていません。式トランスフォーメーションによりストアドプロシージャの式を使用してSQLトランスフォーメーションが呼び出されるか、ストアドプロシージャがマッピングの前または後に実行されます。 ストアドプロシージャの出力を式の出力フィールドと変数に返すように式を設定できます。複数の式からストアドプロシージャを呼び出し、ストアドプロシージャをネストすることができます。 未接続のSQLトランスフォーメーションを使用してストアド関数を処理することはできません。 ストアドプロシージャは、次のタスクを実行する場合などに使用します。
• データをターゲットデータベースにロードする前にターゲットデータベースのステータスをチェックする。• データベース内に十分な領域があるかどうかを調べる。• 特殊な計算を行う。• 値でデータを取得する。• インデックスを削除および再作成する。• 一時テーブルを削除する。• テーブルがデータベースに存在することを確認する。ストアドプロシージャを使用して、マッピングの一部で行うような計算を実行できます。例えば、消費税を計算するストアドプロシージャがある場合、式トランスフォーメーションで計算を再作成せずに、SQLトランスフォーメーションで計算を実行できます。
マッピングを実行すると、SQLトランスフォーメーションは入力パラメータをストアドプロシージャに渡します。ストアドプロシージャは戻り値をトランスフォーメーションの出力フィールドに渡します。
接続されたSQLトランスフォーメーションの例 マッピングには、データフローのユーザーIDが含まれます。ユーザーIDに加えてユーザー名を含める必要がある場合があります。
ユーザーIDをデータベースのユーザー名とマッチングするストアドプロシージャがあります。マッピングにSQLトランスフォーメーションを追加し、そのストアドプロシージャを選択して、ユーザーID受信フィールドをストアドプロシージャのユーザーID入力フィールドとマッピングします。[出力フィールド] タブにSQLトランスフォーメーションがあるかチェックし、SQLトランスフォーメーションにユーザー名フィールドが含まれていることを確認します。マッピングを実行すると、ユーザー名の値がユーザーIDとともに返されます。
接続されていないSQLトランスフォーメーションの例 マッピングに従業員の給与データが含まれており、各従業員の給与を昇給で更新する必要があります。
従業員の昇給を計算するストアドプロシージャがあります。このストアドプロシージャは、新しい給与と増加率を返します。接続されていないSQLトランスフォーメーションを追加し、ストアドプロシージャを選択します。
次に、式トランスフォーメーションをマッピングパイプラインに追加します。式トランスフォーメーションで、新しい給与を取得するための変数フィールドを追加します。出力フィールドを追加し、ストアドプロシージャの関数を使用して式を設定します。出力フィールドが増加率を返すように引数を設定し、新しい給与を返す2番目の出力フィールドを作成します。その後、新しい出力フィールドをダウンストリームトランスフォーメーションにマッピングします。