任意のSQLの実行を行います。
フローサービスでRDBのフィールドを扱うためには、フローサービスのデータ型に各RDBのフィールドの型を対応させる必要があります。各種RDBのフィールドとフローサービスのデータ型との対応については、フローサービスマニュアルの「RDBとのデータ型の相互変換」を参照してください。
| 入力 | フォーマット | すべて |
|---|---|---|
| 接続数 | 1 | |
| 説明 | 入力ストリームは使用せず、すべて無視します。 | |
| 出力 | フォーマット | すべて |
| 説明 | 実行する処理が「SELECT文を発行」または「ストアド実行(結果あり)」の場合は、出力ストリームはRecordになります。 実行する処理が「任意のSQLを実行」または「ストアド実行(結果なし)」の場合は、入力ストリームをそのまま出力します。 |
| 名前 | プロパティ型 | マッピング | 説明 | ||||||
|---|---|---|---|---|---|---|---|---|---|
| コネクション名 | connection | - | 接続先のRDBを指定します。 コネクションペインまたは管理コンソールにて作成されたRDB接続名を選択します。 | ||||||
| 実行する処理 | choice | - |
実行するSQLの種類を指定します。 各種類ごとの動作は、下記トピック「実行する処理ごとの動作」を参照してください。
|
||||||
| SQL文 | string | 入力&出力 |
実行するSQLまたはProcedureを記述します。 フロー実行時の動的な値を含めるためのSQLまたはProcedureの記述方法は、下記トピック「SQLパラメータの使い方」を参照してください。 |
||||||
| ループを開始 | loopProcess | - | 実行する処理が「SELECT文を発行」または「ストアド実行(結果あり)」の場合、結果セットをまとめて出力するか1レコードずつループして出力するかを選択します。実行する処理がこれ以外はプロパティが表示されません。
|
||||||
| タイムアウト(秒) | int | 入力&出力 |
DBMSに対してSQL文を発行してから結果が返ってくるまでの待ち時間を秒単位で指定します。 指定時間を経過しても実行が終わらない場合はエラーになります。0の場合、タイムアウトしません。 |
||||||
| レコードが無い場合エラー | boolean | - |
結果セットのレコード件数が0件だった場合にエラーを発生するかどうかを選択します。
|
||||||
| 処理件数 | int | 出力 | 実行する処理が「任意のSQLを実行」の場合に更新されたレコード件数が取得できます。 実行する処理がそれ以外の場合はプロパティが表示されません。 |
||||||
| トランザクションに含める | boolean | - |
DBMSとの接続をトランザクションに含めるかどうかを選択します。 実行する処理が更新を伴わないものであり、フローがトランザクション化されていない場合は「いいえ」 にした方がフロー全体の処理速度があがります。
|
||||||
| SQLパラメータを使用する | boolean | - |
$,? を使用したいときにこのプロパティを「いいえ」にするとSQLパラメータ置換処理をせずコンポーネントを実行できます。
また、この場合はSQLパラメータが設定されていても無視されるので注意してください。 ストアド実行(結果あり)の場合、「? = call procedulre_name( )」等記述してある場合動作しなくなります。
|
||||||
| SQLパラメータ | category | 入力&出力 |
パラメータ名、入出力種別、データ型、値のセットで定義します。 値は、前に連結したマッパーからマッピングすることが可能です。また、入出力種別で出力するパラメータは直後に連結したマッパーから参照することもできます。詳細については、下記トピック「SQLパラメータの使い方」を参照してください。 |
出力ストリームがRecordで、かつループを開始が「はい」の場合、このコンポーネントがループの起点となって結果セットのレコードを1レコードずつ出力します。
| コミット | トランザクションに含めるが「はい」の場合、DBMSをコミットします。 |
|---|---|
| ロールバック | トランザクションに含めるが「はい」の場合、DBMSをロールバックします。 |
| タイプ | パラ メータ | エラー処理フロー へのストリーム | エラー コード | 説明 |
|---|---|---|---|---|
| 汎用 | なし | コンポーネントの入力ストリーム | なし | コネクション名に指定したコネクションが見つからない場合 |
| なし | SQLまたはProcedureの実行に失敗した場合 | |||
| なし | SQL文がタイムアウトした場合 | |||
| 接続エラー | なし | コンポーネントの入力ストリーム | なし | DBMSとの接続に失敗した場合 |
| レコードが無い | なし | コンポーネントの入力ストリーム | なし | 出力ストリーム型がRecordとなる場合かつレコードが無い場合エラーが「はい」で、結果セットが0行の場合 |
データベースにMicrosoft Accessを使用し、本コンポーネントの実行する処理プロパティが「SELECT文を発行」または「ストアド実行(結果あり)」の場合、フローの開始コンポーネントの「トランザクション化」プロパティを「いいえ」、本コンポーネントのループを開始プロパティを「はい」、トランザクションに含めるプロパティを「はい」にする組合せは利用できません。
フローを強制終了すると、通常は実行中のコンポーネントの処理が終了してから次のコンポーネントに制御が遷移する時点でフローがアボートしますが、本コンポーネントでは実行中の処理を強制的に終了してフローがアボートします。強制終了された場合、トランザクションをロールバックします。
SELECT以外の任意のSQLを実行する場合に使用します。
SQL文にはInsert、Update、Delete、Create Tableなど、DBMSのサポートするあらゆるSQLを記述することができます。
SELECT文を実行する場合に使用します。
SQL文には実行するSELECT文を記述します。
結果セットとフィールド定義の関係は、下記トピック「SQL文中のカラムと出力ストリームのフィールドの関係」を参照してください。
結果セットを返さないストアドプロシージャを実行する場合に使用します。
SQLの書式はのように、実行するプロシージャを{ callと}で囲んで記述します。
この例ではPROC-NAMEがプロシージャ名、P1、P2がSQLパラメータ名です。
{ call PROC-NAME( ?P1?, ?P2?)}
DBMSがOracleの場合は、以下のようにファンクションを指定して出力するパラメータを先頭に定義することも可能です。
{ ?RET? = call FUNC-NAME(?P1?, ?P2?)}
結果セットを返すストアドプロシージャを実行する場合に使用します。
DBMSがOracle以外の場合、記述方法は「ストアド実行(結果なし)」と同じです。この場合、実行するプロシージャは結果セットを返す必要があります。
DBMSがOracleの場合、SQLパラメータの定義でデータ型「RESULTSET」を使用して、取得する結果セットパラメータがどこにあるかを指定する必要があります。詳細については、下記トピック「SQLパラメータの使い方」を参照してください。
{ ?RS? = call hoge(?P1?)}
{ call fuga(?P1?, ?RS?)}
※RSがデータ型「RESULTSET」のSQLパラメータとします。
この場合、データ型「RESULTSET」のSQLパラメータは任意の位置に記述できます。ただし、複数指定することはできません。Oracle以外のDBMSでは、2番目の例のようにパラメータとして結果セットをやり取りするプロシージャは実行できません。
結果セットとフィールド定義の関係は、下記トピック「SQL文中のカラムと出力ストリームのフィールドの関係」を参照してください。
本コンポーネントの出力ストリームとしてレコードを取得するには、ストリームペインにフィールドを定義する必要がありますが、SQL文中の各カラムと出力ストリームのフィールドは順序によってマッピングされるため、カラム名とフィールド名は一致する必要はありません。
カラム数が出力ストリームで定義されたフィールド数と異なる場合や、カラムのデータ型が対応するフィールドのデータ型と異なる場合でも、順序によってマッピングされます。
SQLパラメータを使うと、実行時の動的な文字列を含むSQL文を実行することができます。SQL文に記述する際に、SQLパラメータで定義した任意の名前のパラメータ名を含むSQL文を記述します。本コンポーネントの前にマッパーを配置し、定義したパラメータにマッピングすることにより、実行時の動的な文字列を含むSQL文を実行することができます。
パラメータには、以下の2つの書式があります。
SQLパラメータ書式は、SQL文中のフィールド値となる箇所で使います。パラメータの定義では、フィールドに対応したデータ型を指定します。SQL文で、置き換えたい文字列を使用する部分に「?パラメータ?」のようにパラメータ名を?で囲んで記述します。
置換文字列書式は、SQL文中の任意の箇所で使います。パラメータの定義では、データ型にStringを指定します。SQL文で、置き換えたい文字列を使用する部分に「$パラメータ名$」のようにパラメータ名を$で囲んで記述します。
以下の手順で記述します。
実行する処理が「任意のSQLを実行」または「SELECT文を発行」の場合、入出力種別はすべて「入力」を指定します。ストアド実行(結果なし)」または「ストアド実行(結果あり)」の場合は、ストアドプロシージャの入出力タイプに応じて指定します。
DBMSがOracleで、実行する処理が「ストアド実行(結果あり)」の場合、SQLパラメータを定義する際にデータ型にRESULTSETを指定し、このパラメータを用いて結果セットの位置を指定する必要があります。
※RESULTSETは、この場合にのみ使用するデータ型です。
SQLパラメータタブで、フィールドを右クリックして表示されるメニューから「上に移動」「下に移動」「挿入」「削除」を操作します。
パラメータフィールドリストをCSV形式で表現した一覧を、いつも使用しているエディタで編集することができます。パラメータフィールドリストのCSV形式は、各項目の文字列をカンマ(,)区切りで表現しています。以下に、例と項目の説明を示します。
para1,in,VARCHAR,TEST para2,in/out,VARCHAR,SAMPLE
| 項目名 | 内容 |
|---|---|
| パラメータ名 | パラメータ名。 |
| 入出力 | 入力の場合、in。 入出力の場合、in/out。 出力の場合、out。 |
| データ型 | データ型。 |
| 値 | 値。指定しなかった場合は空文字になります。 |
フローデザイナーのテキストエディタが表示されます。いつも使用しているエディタで編集するには、テキストエディタ画面上部にある「外部エディタ」ボタンをクリックします。関連付けられたエディタが起動されます。
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
SQLパラメータの基本的な概念はRDBGetコンポーネントで使用するSQLパラメータと同じですが、以下の点が異なります。