接続されていないSQLトランスフォーメーション
接続されていないSQLトランスフォーメーションとは、マッピングパイプラインに接続されていないSQLトランスフォーメーションです。接続されていないSQLトランスフォーメーションは、ストアドプロシージャを呼び出すために使用します。
式トランスフォーメーションを使用して、:SP式で接続されていないSQLトランスフォーメーションを呼び出します。または、マッピングの実行の前または後にストアドプロシージャを呼び出すようにSQLトランスフォーメーションを設定します。例えば、接続されていないSQLトランスフォーメーションを使用して、マッピングがソースからデータを受信した後に一時的なソーステーブルを削除できます。
また、マッピングでストアドプロシージャを複数回呼び出す場合も、接続されていないSQLトランスフォーメーションを使用できます。
式からの接続されていないSQLトランスフォーメーションの呼び出し
:SP式を使用した式トランスフォーメーションから、接続されていないSQLトランスフォーメーションを呼び出します。
式からストアドプロシージャを呼び出すときは、ストアドプロシージャの出力値を式のフィールドに返すように式を設定します。次のいずれかの方法を使用して、出力値を返します。
- •出力値をローカル変数フィールドに割り当てる。
- •出力値をシステム変数PROC_RESULTに割り当てる。
PROC_RESULT変数を使用する場合、データ統合によってリターンパラメータの値が出力フィールドに直接割り当てられるため、その値をターゲットに書き込むことができます。ある出力パラメータをPROC_RESULTに、別のパラメータを別の変数に割り当てることもできます。
式の変数を使用して、ストアドプロシージャのOUTまたはINOUTパラメータにアクセスできます。ストアドプロシージャが複数の出力パラメータを返す場合は、それぞれの出力パラメータのための変数を作成しなければなりません。
式でストアドプロシージャを呼び出すには、次の構文を使用します。
:SP.<SQL transformation name> (arg1, arg2, PROC_RESULT)
ストアドプロシージャが1つの出力パラメータまたは戻り値を返すのであれば、予約変数PROC_RESULTを出力変数として使用します。
例えば、次の式はGET_NAME_FROM_IDという名前のストアドプロシージャを呼び出します。
:SP.GET_NAME_FROM_ID(inID, PROC_RESULT)
inIDはストアドプロシージャの入力フィールド、または式トランスフォーメーションの変数です。マッピングを実行すると、データ統合は、PROC_RESULTの値を式の出力フィールドに適用します。
ストアドプロシージャが複数の出力パラメータを返す場合は、それぞれの出力パラメータに対して式変数を作成する必要があります。例えば、ストアドプロシージャがタイトルも返す場合は、式トランスフォーメーションでvarTitle1という変数フィールドを作成し、そのフィールドをTitleという出力フィールドの式として使用します。次のような式になります。
:SP.GET_NAME_FROM_ID(inID, varTitle1, PROC_RESULT)
次の図に、式トランスフォーメーションの設定方法を示します。
データ統合は、ストアドプロシージャで宣言された順序で出力パラメータを返します。この例では、データ統合は、ストアドプロシージャの最初の出力フィールドの値をvarTitle1に適用し、varTitle1を式トランスフォーメーションのTitleフィールドに渡します。ストアドプロシージャの2番目の出力フィールドの値を式の出力フィールドに適用します。
式フィールドと変数のデータ型は、ストアドプロシージャの入力/出力変数と戻り値のデータ型と一致する必要があります。
ストアドプロシージャをマッピング実行の前または後で呼び出す
ストアドプロシージャをマッピング実行の前または後で処理するように、接続されていないSQLトランスフォーメーションを設定できます。データ統合は、指定された時間にストアドプロシージャを呼び出します。ストアドプロシージャを:SP式を使用して呼び出す必要はありません。ストアドプロシージャは、マッピングがソースからデータを受信する前または後、またはマッピングがターゲットにデータをロードする前または後に実行するように設定できます。
以下のストアドプロシージャタイプを設定できます。
- •Source Pre Load。ストアドプロシージャは、マッピングがソースからデータを受信する前に実行されます。
- •Source Post Load。ストアドプロシージャは、マッピングがソースからデータを受信した後に実行されます。
- •Target Pre Load。ストアドプロシージャは、マッピングがターゲットにデータを送信する前に実行されます。
- •Target Post Load。ストアドプロシージャは、マッピングがターゲットにデータを送信した後に実行されます。
[詳細]タブで、ストアドプロシージャタイプを設定し、ストアドプロシージャの呼び出しテキストを入力します。呼び出しテキストでは、ストアドプロシージャの名前に続けてかっこ内に適切な入力パラメータを指定します。入力パラメータがない場合は、かっこのみを含める必要があります。SQL文のEXECを含めたり、:SPキーワードを使用したりしないでください。
例えば、ストアドプロシージャDrop_Tableを呼び出すには、次の呼び出しテキストを入力します。
Drop_Table()
文字列の入力パラメータを渡す場合はそれを引用符で囲まずに入力します。文字列の中に空白が含まれている場合は、パラメータを二重引用符で囲みます。例えば、ストアドプロシージャDrop_Tableで入力パラメータとしてテーブル名が必要な場合は、次の呼び出しテキストを入力します。
Drop_Table(Customer_list)
ストアドプロシージャの実行順序
ロード前またはロード後のソースまたはターゲットのストアドプロシージャが複数ある場合は、ストアドプロシージャの実行順序を指定します。データ統合は指定した順序でストアドプロシージャを呼び出します。実行順序を指定しない場合、データ統合は実行時に受信した順序でストアドプロシージャを呼び出します。
ストアドプロシージャの実行順序は、ストアドプロシージャタイプが[標準]以外に設定され、そのタイプのストアドプロシージャがマッピングに複数存在する場合に指定できます。例えば、データ統合がソースをロードする前に呼び出すストアドプロシージャが複数ある場合は、ソースのロード前ストアドプロシージャの実行順序を指定することができます。
ストアドプロシージャの実行順序を設定するには、[アクション]メニューを開き、[ストアドプロシージャの順序]を選択します。
[ストアドプロシージャの順序]ダイアログには、特定のタイプのストアドプロシージャが1つしかない場合でも、マッピング内のすべてのソースおよびターゲットのロード前およびロード後のストアドプロシージャが表示されます。[ストアドプロシージャの順序]ダイアログに表示されるタブは、マッピング内のストアドプロシージャのタイプに応じて異なります。例えば、マッピングにターゲットのロード前ストアドプロシージャが含まれていない場合、[ターゲットのロード前]タブは表示されません。
次の画像は、[ストアドプロシージャの順序]ダイアログを示しています。
ストアドプロシージャの実行順序を設定するには、ストアドプロシージャを選択し、上矢印と下矢印を使用して順序を変更します。データ統合は、上から順にストアドプロシージャを呼び出します。
ストアドプロシージャのタイプが[標準]のストアドプロシージャや、接続されているストアドプロシージャの実行順序を指定することはできません。
接続されていないSQLトランスフォーメーションの例
生活費の増加に伴って従業員の給与を更新しているとします。手元には従業員の名前とIDを含むCSVファイルがあります。それぞれの従業員の給与を増額し、その増額分を計算して、データを新しいCSVファイルに書き込む必要があります。
次のようなソースデータがあります。
EMP_ID, EMP_NAME
1001, John
1002, Alice
1003, Mary
1004, Mark
1005, Stephan
Oracleデータベースには、従業員の給与をファイルに追加するADD_SALARYというストアドプロシージャと、昇給を計算するSALARY_INCREASEという2番目のストアドプロシージャがあります。マッピングでは、接続されていない2つのSQLトランスフォーメーションを使用してストアドプロシージャを呼び出し、2つの式トランスフォーメーションを使用してSQLトランスフォーメーションを呼び出します。
次の図に、マッピングを示します。
次の方法でトランスフォーメーションを構成します。
- ソーストランスフォーメーション
- 使用するソースデータをロードするように、ソーストランスフォーメーションを設定します。
- SQL_Add_Salaryトランスフォーメーション
- ADD_SALARYストアドプロシージャを呼び出すように最初のSQLトランスフォーメーションを設定します。
- [SQL]タブで、ADD_SALARYストアドプロシージャを含む接続を選択してから、ストアドプロシージャを選択します。
- [接続されていないストアドプロシージャ]を選択します。
- このストアドプロシージャには、従業員IDの入力フィールドが1つあり、出力フィールドには現在の給与が返されます。
- SQL_Increaseトランスフォーメーション
- SALARY_INCREASEストアドプロシージャを呼び出すように2番目のSQLトランスフォーメーションを設定します。
- [SQL]タブで、SALARY_INCREASEストアドプロシージャを含む接続を選択してから、ストアドプロシージャを選択します。
- [接続されていないストアドプロシージャ]を選択します。
- このストアドプロシージャには、従業員名の入力フィールドが1つあり、出力フィールドには新しい給与が返されます。
- Expression_Add_Salaryトランスフォーメーション
- SQL_Add_Salaryトランスフォーメーションを呼び出すように最初の式トランスフォーメーションを設定します。ストアドプロシージャの出力をキャプチャするために、入力パラメータの変数フィールドと出力フィールドを作成します。
- [式]タブで、IDという名前の変数フィールドを追加し、その値をソースの[EMP_ID]フィールドとして設定します。最初のSQLトランスフォーメーションでADD_SALARYストアドプロシージャの戻り値を取得するための[salary]という出力フィールドを作成します。次の式を使用してADD_SALARYストアドプロシージャを呼び出すように[salary]フィールドを設定します。
:SP.SQL_Add_Salary(ID, PROC_RESULT)
- この式は、ストアドプロシージャの入力パラメータとして変数フィールドIDを受け取り、給与値を[SALARY]出力フィールドに返します。
- 次の図に、式トランスフォーメーションの設定方法を示します。
- Expression_Increaseトランスフォーメーション
- SQL_increaseトランスフォーメーションを呼び出すように2番目の式トランスフォーメーションを設定します。[CurrentSalary]という変数フィールドを追加し、その値を[入力給与]フィールドとして設定します。SALARY_INCREASEストアドプロシージャの戻り値を取得するための[newSalary]という出力フィールドを追加します。次の式を使用してSALARY_INCREASEストアドプロシージャを呼び出すように[newSalary]フィールドを設定します。
:SP.SQL_increase(CurrentSalary, PROC_RESULT)
- この式は、変数フィールド[CurrentSalary]をストアドプロシージャの入力パラメータとして受け取り、新しい給与を[newSalary]出力フィールドに返します。
- 次の図に、式トランスフォーメーションの設定方法を示します。
- ターゲットトランスフォーメーション
- 実行時にターゲットファイルを作成するようにターゲットトランスフォーメーションを設定します。
マッピングを実行すると、次のような結果が得られます。
EMP_ID, EMP_NAME, salary, newSalary
1001, John, 400, 480
1002, Alice, 500, 600
1003, Mary, 400, 480
1004, Mark, 700, 840
1005, Stephan, 600, 720