任意の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との接続に失敗した場合 |
レコードが無い | なし | コンポーネントの入力ストリーム | 3 | 出力ストリーム型が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パラメーターと同じですが、以下の点が異なります。