RDBMSへSELECT文を発行して結果セットをストリームとして出力します。
フローサービスでRDBのフィールドを扱うためには、フローサービスのデータ型に各RDBのフィールドの型を対応させる必要があります。各種RDBのフィールドとフローサービスのデータ型との対応については、フローサービスマニュアルの「RDBとのデータ型の相互変換」を参照してください。
入力 | フォーマット | すべて |
---|---|---|
接続数 | 無制限 | |
説明 | 入力ストリームは使用せず、すべて無視します。 | |
出力 | フォーマット | Record |
名前 | プロパティ型 | マッピング | 説明 | ||||||
---|---|---|---|---|---|---|---|---|---|
コネクション名 | connection | - | 接続先のRDBを指定します。 コネクションペインまたは管理コンソールにて作成されたRDB接続名を選択します。 | ||||||
SQL文 | string | 入力&出力 |
実際にRDBMSに対して発行されるSQLを指定します。 SQLビルダーによって自動作成したり、さらに編集したりすることができます。詳細については下記トピック「SQLビルダーの使い方」を参照してください。SQLビルダーを使わずに、前に連結したマッパーからSQL文の文字列をマッピングすることもできます。 |
||||||
フィルターを指定 | boolean | - |
取得した結果セットに対して読込み開始行 と取出す件数 でフィルタリングを行うかどうかを指定します。
|
||||||
読込み開始行 | int | 入力&出力 | フィルターを指定 が「はい」の場合に出力するレコードの開始行を指定します。 行のインデックスは1ベースのインデックスです。 読込み開始行 が結果セットの件数よりも大きい場合はレコードが無い が発生します。(レコードが無い場合エラー が「いいえ」の場合は空の結果セットが出力されます。) |
||||||
取出す件数 | int | 入力&出力 | フィルターを指定 が「はい」の場合に出力するレコードの行数を指定します。 例えば読込み開始行 =11、取出す件数 =10の場合は入力レコードセットの11行目から10行が出力されます。 取出す件数 に達する前に入力レコードが最終行に達した場合はそこまでのレコードが出力されます。 取出す件数 が0の場合は、読込み開始行 以降のすべての行が出力されます。 |
||||||
タイムアウト(秒) | int | 入力&出力 |
RDBMSへSELECT文を発行してから結果が返ってくるまでの待ち時間を秒単位で指定します。 指定時間を経過しても実行が終わらない場合は汎用 となります。 0の場合はタイムアウトすることはありません。 |
||||||
ループを開始 | loopProcess | - |
結果セットをまとめて出力するかループ時に取出す件数 での指定行数ずつループして出力するかを選択します。
|
||||||
ループ時に取出す件数 | int | 入力&出力 | ループを開始 がはいの場合に一度の実行で出力する行数を指定します。 | ||||||
レコードが無い場合エラー | boolean | - |
結果セットのレコード件数が0件だった場合にエラーを発生するかどうかを選択します。
|
||||||
トランザクションに含める | boolean | - |
DBMSとの接続をトランザクションに含めるかどうかを選択します。 実行する処理が更新を伴わないものであり、フローがトランザクション化されていない場合は「いいえ」にした方がフロー全体の処理速度があがります。 通常、このコンポーネントで行われる処理はSELECTのみですので、このプロパティを「はい」にする必要はありません。
|
||||||
フェッチサイズ | int | - |
JDBCのsetFetchSize()に設定する値を指定します。 デフォルト値は1000です。 MySQLを使用する場合はコネクションのURLに「useCursorFetch=true」のパラメーターを設定する必要があります。 |
||||||
SQLパラメーターを使用する | boolean | - |
$,? をSQL文で使用したいときにこのプロパティを「いいえ」にするとSQLパラメーター置換処理をせずコンポーネントを実行できます。
また、この場合はSQLパラメーターが設定されていても無視されるので注意してください。
|
||||||
SQLパラメーター | category | 入力&出力 | SQL文 中にパラメーター書式を埋め込むことにより、SQLパラメーター の値をパラメーターまたは置換文字列として使用することができます。 SQLパラメーター はSQLビルダーを使って定義します。詳細については下記トピック「SQLビルダーの使い方」を参照してください。 |
ループを開始 が「はい」の場合、このコンポーネントがループの起点となって結果セットのレコードを1レコードずつ出力します。
コミット | トランザクションに含める が「はい」の場合、RDBMSをコミットします。 |
---|---|
ロールバック | トランザクションに含める が「はい」の場合、RDBMSをロールバックします。 |
タイプ | パラメーター | エラー処理フロー へのストリーム | エラー コード | 説明 |
---|---|---|---|---|
汎用 | なし | コンポーネントの入力ストリーム | データベースベンダー固有の例外コード | SQL文 が不正な場合 |
なし | コネクション名 に指定したコネクションが見つからない場合 | |||
データベースベンダー固有の例外コード | SQL文 がタイムアウトした場合 | |||
接続エラー | なし | コンポーネントの入力ストリーム | なし | DBMSとの接続に失敗した場合 |
レコードが無い | なし | コンポーネントの入力ストリーム | 3 | レコードが無い場合エラー が「はい」の場合で、レコードが0件の場合 |
4 | レコードが無い場合エラー が「はい」の場合で、フィルターを指定 を適用した結果出力レコードが0件になった場合 |
データベースにMicrosoft Accessを使用する場合、フローの開始コンポーネントの「トランザクション化」プロパティを「いいえ」、本コンポーネントのループを開始 プロパティを「はい」、トランザクションに含める プロパティを「はい」にする組合せは利用できません。
フローを強制終了すると、通常は実行中のコンポーネントの処理が終了してから次のコンポーネントに制御が遷移する時点でフローがアボートしますが、本コンポーネントでは実行中の処理を強制的に終了してフローがアボートします。強制終了された場合、トランザクションをロールバックします。
SQLビルダーを終了後、「フィールド定義を更新しますか?」メッセージダイアログボックスが表示されます。「はい」をクリックすると、SQLビルダーで選択したSELECT文中のカラムがストリームペインで出力ストリームとして定義されます。「いいえ」をクリックすると、ストリームペインには定義されません。
本コンポーネントの出力ストリームとしてレコードを取得するには、ストリームペインにフィールドを定義する必要がありますが、SQLビルダーで生成したSELECT文中の各カラムと出力ストリームのフィールドは順序によってマッピングされるため、カラム名とフィールド名は一致する必要はありません。
SELECTされたカラム数が出力ストリームで定義されたフィールド数と異なる場合や、カラムのデータ型が対応するフィールドのデータ型と異なる場合でも、順序によってマッピングされます。
SQLビルダーは、SQL文を自動生成する専用ツールです。SQLビルダーを使うと、簡単な操作で以下のようなことができます。
以下のいずれかの操作でSQLビルダーを起動します。
SQLビルダーを起動すると(1)にテーブルの一覧が表示されます。読み込むテーブルを指定するには、2つの方法があります。以下の方法で操作すると、(2)にテーブルのフィールド一覧が表示されます。
(1)の一覧からテーブル名をクリックしてドラッグを開始し、(2)にドロップします。
(2)の空いたスペースで右クリックして表示されるメニューから「テーブル名を指定して追加」をクリックします。表示されたダイアログでテーブル名を入力して「OK」をクリックします。
(1)または(2)に表示したテーブルをクリックすると、(3)に詳細情報が表示されます。
実際に読み込むフィールドを指定するには、2つの方法があります。以下の方法で操作すると、(5)にSQL文が表示されます。
フィールドリストでフィールド名の左にあるチェックボックスをオンにします。(4)の選択列タブに表示されます。指定したフィールドを取り消すには、チェックボックスをオフにします。(4)の選択列タブから削除されます。
フィールド名の空いたフィールドをクリックして表示されるプルダウンリストから読み込むフィールドを選択します。
(4)でフィールドをクリックしてから、右クリックして表示されるメニューから「上に移動」「下に移動」「削除」を操作します。
(2)の画面で右クリックして表示されるメニューから「重複の抑制(DISTINCT)」を実行すると自動生成されるSELECT文にDISTINCT句が付加されます。
レコードを昇順または降順にソートして読み込むには、以下の2つの方法があります。以下の方法で操作すると、(5)のSQL文に反映されます。
フィールドリストでフィールドをクリックし、右クリックして表示されるメニューの「ソートに追加」から「昇順」または「降順」をクリックします。
フィールド名の空いたフィールドをクリックして表示されるプルダウンリストから並び替えのキーとなるフィールドを選択します。指定したフィールド名のソート順プルダウンリストから「昇順」または「降順」を選択します。
フィールドリストでフィールドをクリックし、右クリックして表示されるメニューの「ソートに追加」から「(なし)」をクリックします。
またはソートタブのフィールドをクリックし、右クリックして表示されるメニューから「削除」をクリックします。
フィールドに対して集約関数を適用する場合には、以下の2つの方法があります。以下の方法で操作すると、(5)のSQL文に反映されます。
フィールドリストでフィールドをクリックし、右クリックして表示されるメニューから「集約関数」を経由して適用する集約関数を選択します。
フィールド名の空いたフィールドをクリックして表示されるプルダウンリストから集約関数を適用するフィールドを選択します。指定したフィールド名の集約関数プルダウンリストから適用する集約関数を選択します。
「COUNT(*)」を設定する場合は「2」の画面からのみ設定でき、集約関数タブ上では選択できません。
(2)の画面でフィールドを選択しての右クリックメニューから「集約関数」を経由して「なし」を選択します。
または集約関数タブのフィールドをクリックし、右クリックして表示されるメニューから「削除」をクリックします。
集約関数が設定されていてもそのフィールドがSELECT対象に含まれていない(フィールドがチェックされていない)場合はSELECT句にその項目は含まれません。
GROUP BY句にはSELECT対象のフィールドで集約関数が含まれていないフィールドが自動的に設定されます。
SQLビルダーでは、リレーションを含んだSQL文を自動生成することができます。テーブル間でリレーションを設定するには、以下の手順で行います。
リレーションを削除するには、連結したリンクを右クリックして表示されるメニューから「リレーション削除」をクリックします。
SQLビルダーでは、レコードの抽出条件を固定値と比較したりフローの中での動的な値と比較したりする設定を行うことができます。また、条件式を直接入力してSQL文に追加記述することができます。
(5)のSQL文に抽出条件が追加されます。(2)のフィールドリストに条件式が表示されます。
SQLビルダーで、任意の名前のパラメーターを定義し、抽出条件にするフィールド名に条件を追加する際にパラメーター名を指定することにより、パラメーターをWHERE句をSQL文の中に組み込みます。本コンポーネントの前にマッパーを配置し、定義したパラメーターにマッピングすることにより、実行時の動的な値を抽出条件にすることができます。
動的な値の抽出条件を指定するためには、以下の手順で行います。
RDBGetコンポーネントの前にマッパーを配置し、マッピングウィンドウの出力側にあるパラメーターのフィールド名に値となるフィールドをマッピングします。
(5)のSQL文に抽出条件が追加されます。(2)のフィールドリストに条件式が表示されます。
任意の条件を指定するには、以下の2つの方法があります。以下の方法で操作すると、(5)のSQL文に抽出条件が追加されます。
条件の編集ダイアログボックスから
(4)の画面から(条件タブ)
いろいろな条件を組み合わせて抽出を行う場合、(4)の条件タブで論理演算子を指定することができます。条件フィールドの「関係」項目のプリダウンリストから「AND」または「OR」をクリックします。
指定した抽出条件を編集するには、条件タブのフィールドをダブルクリックします。または、フィールドをクリックし、右クリックして表示されるメニューから「条件の編集」をクリックします。
条件タブのフィールドをクリックし、右クリックして表示されるメニューから「削除」をクリックします。
SQLビルダーのSQLパラメーターは、抽出条件(WHERE句)を設定する以外に、SQL文の中での任意の文字列を置き換えることができます。任意の名前のパラメーターを定義し、(5)で直接パラメーターを記述します。また、条件の編集ダイアログボックスで任意の条件を指定するときに記述することもできます。本コンポーネントの前にマッパーを配置し、定義したパラメーターにマッピングすることにより、実行時に動的なSQL文にすることができます。
動的なSQL文を指定するためには、以下の手順で行います。
(4)でフィールドを右クリックして表示されるメニューから「上に移動」「下に移動」「挿入」「削除」を操作します。
(1)~(4)の指定で自動生成したSQL文が(5)に表示されます。(5)を直接編集すると、そのSQL文をそのままRDBMSに発行します。直接編集する際には、自動生成したSQL文と同期すると元に戻るため注意が必要です。同期設定については次項の「自動生成するSQL文表示のオプション」を参照してください。
実際にRDBMSにSQL文を発行してテスト実行するには、以下の手順で行います。
正常終了の場合、実行結果がダイアログボックスに結果セットが表示されます。異常終了の場合、エラーメッセージダイアログボックスに表示されます。
結果のBLOBフィールドからStringデータを取得できない場合は空文字列として表示されます。
(5)の画面下部右側にある「テスト結果の行数」フィールドの行数を変更してから「SELECTテスト」をクリックします。初期値は100です。
(5)の表示については、画面下部右側でオプションを指定することができます。
SQLビルダーを使って指定したフィールドの選択、条件などのことをモデルといいます。「SQLを常に同期する」チェックボックスがオンの場合、(1)~(4)のモデルと(5)のSQL文が同期して自動生成された状態です。自動生成したSQL文を(5)で直接編集することができます。この場合、モデルを操作すると直接編集したSQL文が同期しないように、自動的に「SQLを常に同期する」チェックボックスがオフになります。直接編集をリセットした場合や再度操作したモデルからSQL文を自動生成する場合、「モデルをSQLに適用する」をクリックします。
SQL文 の値が以下の場合
SELECT GROUP, NAME, KANA FROM EMPLOYEE WHERE GROUP = ?GROUP? ORDER BY $ORDER$
SQLパラメーター が以下の場合
GROUP=Sales
ORDER=KANA
実際に発行されるSQL文は、以下のようになります。GROUPのパラメーターには「Sales」、ORDERのパラメーターには「KANA」という値が入ります。
SELECT GROUP, NAME, KANA FROM EMPLOYEE WHERE GROUP = Sales ORDER BY KANA