トランスフォーメーション > SQLトランスフォーメーション > クエリ処理
  

クエリ処理

Microsoft SQL ServerデータベースまたはOracleデータベースに対して実行される保存済みクエリまたはユーザー入力クエリを処理するように、SQLトランスフォーメーションを設定できます。クエリを処理するようにSQLトランスフォーメーションを設定する場合、アクティブなトランスフォーメーションを作成します。入力行ごとに複数の行をトランスフォーメーションで返すことができます。
クエリの入力時に、SQLを書式設定して、構文を検証することができます。または、文字列パラメータを作成して、マッピングタスクにクエリを定義できます。
以下のタイプのSQLクエリを作成できます。
静的SQLクエリ
クエリ文は変更されませんが、クエリパラメータを使用してデータを変更できます。データ統合によってSQLクエリが一度準備され、そのクエリがすべての入力行に対して実行されます。
動的SQLクエリ
クエリ文およびクエリデータを変更できます。データ統合は、入力行ごとにSQLクエリを準備します。
静的クエリを作成することによって、パフォーマンスを最適化できます。

静的SQLクエリ

各入力行に対して同じクエリ文を実行する必要があるが、クエリ内のデータを入力行ごとに変更する場合、静的SQLクエリを作成します。静的SQLクエリを作成する場合、SQLエディタでパラメータのバインドを使用して、クエリデータのパラメータを定義します。
クエリ内のデータを変更するには、クエリパラメータを設定し、これらのパラメータをトランスフォーメーションの入力フィールドにバインドします。パラメータを入力フィールドにバインドする場合、クエリにフィールド名を指定します。フィールド名を疑問符(? )で囲みます。クエリデータは、入力フィールドのデータの値に基づいて変更されます。
例えば、以下の静的クエリでは、パラメータのバインドが使用されています。
DELETE FROM Employee WHERE Dept = ?Dept?
INSERT INTO Employee(Employee_ID, Dept) VALUES (?Employee_ID?, ?Dept?)
UPDATE Employee SET Dept = ?Dept? WHERE Employee_ID > 100

以下の静的SQLクエリは、SQLトランスフォーメーションのEmployee_IDおよびDept入力フィールドにバインドするクエリパラメータを使用しています。
SELECT Name, Address FROM Employees WHERE Employee_Num = ?Employee_ID? and Dept = ?Dept?
ソースには以下の行があります。
Employee_ID
Dept
100
Products
123
HR
130
Accounting
データ統合は、行から次のクエリ文を生成します。
SELECT Name, Address FROM Employees WHERE Employee_ID = ‘100’ and DEPT = ‘Products’
SELECT Name, Address FROM Employees WHERE Employee_ID = ‘123’ and DEPT = ‘HR’
SELECT Name, Address FROM Employees WHERE Employee_ID = ‘130’ and DEPT = ‘Accounting’

複数のデータベース行の選択

SQLクエリにSELECT文が含まれる場合、トランスフォーメーションによって、取得したデータベース行ごとに1行が返されます。SELECT文のカラムごとに出力フィールドを設定する必要があります。出力フィールドは、SELECT文のカラムと同じ順序である必要があります。
データベースカラムの出力フィールドを設定する場合、選択する各データベースカラムのデータ型を設定する必要があります。ネイティブデータ型をリストから選択します。ネイティブデータ型を選択すると、データ統合によってトランスフォーメーションデータ型が設定されます。
トランスフォーメーションのネイティブデータ型は、データベースカラムのデータ型と一致する必要があります。実行時に、データ統合によってデータベース内のカラムのデータ型がトランスフォーメーションのネイティブデータベースタイプと照合されます。データ型が一致しない場合は、データ統合によって行エラーが生成されます。

動的SQLクエリ

動的SQLクエリでは、入力行ごとに異なるクエリ文を実行できます。動的SQLクエリを作成する場合、文字列の置換を使用してクエリ内に文字列変数を定義し、これらの変数をトランスフォーメーションの入力フィールドにリンクします。
クエリ文を変更するには、変更するクエリ部分の文字列変数をクエリ内に設定します。文字列変数を設定するには、クエリに入力フィールドを名前で指定し、名前をティルダ文字(~)で囲みます。クエリは、フィールドのデータの値に基づいて変更されます。
クエリ変数を含むトランスフォーメーション入力フィールドは、 文字列型データ型である必要があります。文字列の置換を使用して、クエリ文とクエリデータを変更できます。
動的SQLクエリを作成すると、データ統合では、入力行ごとにクエリが準備されます。入力フィールドに次のタイプの動的クエリを渡すことができます。
完全なクエリ
SQLクエリ全体をソースデータのクエリ文で置換できます。
部分クエリ
クエリ文の一部(テーブル名など)を置換できます。

完全なクエリの受け渡し

トランスフォーメーションの入力フィールドを介して完全なSQLクエリを渡すことができます。完全なクエリを渡すには、以下のように完全なクエリを表す1つの文字列変数で構成されたクエリをSQLエディタで作成します。~Query_Field~
完全なクエリを渡すには、出力フィールドに完全なクエリを渡すようにソースを設定します。次に、Query_Field入力フィールドのクエリを受け取るようにSQLトランスフォーメーションを設定します。
次の図は、トランスフォーメーションの設定を示しています。
[プロパティ]パネルの[SQL]タブで、クエリタイプとして[入力済みクエリ]が選択されています。[クエリ]セクションの[フィールド]タブには、「Query_Field」という1つの受信フィールドが示されています。クエリエディタで、クエリに次の1行が含まれています。~Query_Field~
データ統合によって、動的クエリ内の~Query_Port~変数は、ソースのSQL文で置換されます。クエリーが準備され、処理のためにデータベースに送信されます。データベースによってクエリーが実行されます。SQLトランスフォーメーションによって、データベースエラーがSQLError出力フィールドに返されます。
完全なクエリーを渡すときに、入力行ごとに複数のクエリー文を渡すことができます。たとえば、ソースに以下の行が含まれている場合があります。
DELETE FROM Person WHERE LastName = ‘Jones’; INSERT INTO Person (LastName, Address) VALUES ('Smith', '38 Summit Drive')
DELETE FROM Person WHERE LastName = ‘Jones’; INSERT INTO Person (LastName, Address) VALUES ('Smith', '38 Summit Drive')
DELETE FROM Person WHERE LastName = ‘Russell’;
任意のタイプのクエリーをソースデータで渡すことができます。クエリにSELECT文を設定する場合、データベースから取得するデータベースカラムの出力フィールドを設定する必要があります。SELECT文と他のタイプのクエリを混在させると、データベースカラムが取得されない場合、データベースカラムを表す出力フィールドにはNULL値が入ります。

文字列内のテーブル名の置換

部分クエリを使用して、テーブル名を置換することができます。テーブル名を置換するには、各入力行からテーブル名を受け取るように入力フィールドを設定します。クエリに入力フィールドを名前で指定し、名前をティルダ文字(~)で囲みます。
例えば、次の動的クエリには文字列変数~Table_Field~が含まれています。
SELECT Emp_ID, Address from ~Table_Field~ where Dept = ‘HR’
ソースによって、以下の値がTable_Fieldカラムに渡されるとします。
Table_Field
Employees_USA
Employees_England
Employees_Australia
データ統合では、~Table_Field~変数が入力フィールド内のテーブル名で置換されます。
SELECT Emp_ID, Address from Employees_USA where Dept = ‘HR’
SELECT Emp_ID, Address from Employees_England where Dept = ‘HR’
SELECT Emp_ID, Address from Employees_Australia where Dept = ‘HR’

パッシブモードの設定

SQLトランスフォーメーションを作成する際に、SQLトランスフォーメーションがアクティブモードではなくパッシブモードで実行されるように設定できます。パッシブトランスフォーメーションでは、通過する行の数は変更されません。トランザクション境界と行タイプが維持されます。
SQLトランスフォーメーションがクエリを処理するように設定する場合は、トランスフォーメーションの作成時にパッシブモードを設定できます。トランスフォーメーションの詳細プロパティでパッシブモードを設定します。
トランスフォーメーションをパッシブモードに設定し、SELECTクエリが複数の行を返す場合、データ統合は最初の行とエラーをSQLErrorフィールドに返します。このエラーは、SQLトランスフォーメーションが複数行を生成したことを示します。
SQLクエリに複数のSQL文がある場合、データ統合はすべての文を実行しますが、最初のSQL文のデータのみを返します。SQLトランスフォーメーションでは1行が返されます。SQLErrorフィールドには、すべてのSQL文のエラーが含まれます。複数のエラーが発生した場合、SQLErrorフィールド内でエラーはセミコロン(;)で区切られます。

クエリで使用できるSQL文

SQLトランスフォーメーションで、特定のデータ定義、データ操作、データ制御言語、およびトランザクション制御文を使用できます。
次の表に、SQLトランスフォーメーションのSQLクエリで使用できる文を示します。
文のタイプ
説明
データ定義
ALTER
データベースの構造を変更します。
データ定義
COMMENT
データディクショナリにコメントを追加します。
データ定義
CREATE
データベース、テーブル、またはインデックスを作成します。
データ定義
DROP
インデックス、テーブル、またはデータベースを削除します。
データ定義
RENAME
データベースオブジェクトの名前を変更します。
データ定義
TRUNCATE
テーブルからすべての行を削除します。
データ操作
CALL
PL/SQLまたはJavaサブプログラムを呼び出します。
データ操作
DELETE
テーブルから行を削除します。
データ操作
EXPLAIN PLAN
データベースのExplainテーブルに文のアクセスプランを書き込みます。
データ操作
INSERT
行をテーブルに挿入します。
データ操作
LOCK TABLE
アプリケーションプロセスが同時にテーブルを使用または変更することを防止します。
データ操作
MERGE
ソースデータを使用してテーブルを更新します。
データ操作
SELECT
データベースからデータを取得します。
データ操作
UPDATE
テーブルの行の値を更新します。
データ制御言語
GRANT
データベースユーザに特権を付与します。
データ制御言語
REVOKE
データベースユーザのアクセス特権を削除します。
トランザクションコントロール
コミット
作業ユニットを保存し、その作業ユニットのデータベース変更を実行します。
トランザクション制御
ROLLBACK
最後のCOMMIT以降のデータベースへの変更を取り消します。

クエリ処理に関するルールおよびガイドライン

クエリを処理するようにSQLトランスフォーメーションを設定する場合は、以下のルールおよびガイドラインを使用します。