接続するデータベースに対してSQL文を使用してデータベースを操作します。ストアドプロシージャーの記述と呼び出し、一時テーブルの作成、テーブルインデックスの作成、複数のテーブルと結合するクエリの作成などの複雑な機能を実行します。
プロパティ名 |
説明 |
---|---|
接続情報 |
SQL文を実行するデータベースの接続先を選択します。内部データベースを選択することもできます。外部データベースの接続情報をまだ作成していない場合には、[接続情報ダイアログを開く...]をクリックすることで、新しい接続情報を作成できます。詳細については外部データベース接続の管理を参照してください。 |
パラメーター一覧 |
SQL文に記載できる動的な値パラメーターを設定することができます。SQLインジェクションを防ぐため必ずパラメーター機能を使用して値を受け渡すようにし、数式による文字列連結は避けてください。 パラメーターの型はADO.NETにおけるデータ型です。ほとんどの場合はそれぞれのデータベースにおける既定値「String」や「VarChar」のままで問題ありませんが、期待する動作にならない場合にはパラメーターの型を指定してください。 |
SQLクエリー |
SQL文を入力します。[SQLクエリーエディター]をクリックし、SQL文を編集するダイアログボックスが開きます。このダイアログボックスでキーワードと一般的に使用されるSQL文を選択して使用できます。 SQL文の記載は標準SQLおよび接続先データベースの仕様を確認してください。 実行したSQL文の最初の戻り値を受け取ると、処理はその時点で完了となります。たとえば、「SELECT * FROM "Table1";SELECT * FROM "Table2";」を実行した場合、最初のSQL文である「SELECT * FROM "Table1";」は実行されますが、後続の「SELECT * FROM "Table2";」は実行されません。 ヒント:テーブルなどのオブジェクトにスキーマ名の修飾を省略している場合、接続しているユーザーのデフォルトスキーマが変わってしまうと正常に実行できなくなることに注意してください。これはForguncy BuilderとForguncy Serverとで異なる接続文字列を使用している場合などが該当します。 |
戻り値を格納する変数名 |
本コマンドの戻り値としてSQL文の結果を格納する変数を設定します。サーバーサイドコマンドの戻り値ではなく、[SQLクエリーの実行]コマンドの戻り値であることにご注意ください。この変数の値は後続のコマンド内で使用できます。 SELECT文の場合、変数にはその結果がJSON形式で格納されます。それ以外の場合、その操作によって影響を受けた行数が数値で格納されます。 |
実行のタイムアウト時間 |
最終的な実行時間が指定した値を超えた場合、そのSQLクエリーはタイムアウトとなります。「0」を指定した場合、タイムアウト時間の設定はなく、接続先のデータベースドライバーの設定に従います。タイムアウトした場合にはエラーコード「500」が返ります。既定値は「0」です。 なお、本タイムアウト値はデータベースとの通信部分で計測される値であり、本コマンド全体の実行時間と同じではないことに注意してください。本コマンドの実行時間が指定した実行のタイムアウト時間を超えていても、タイムアウトにはならない場合があります。 また、内部データベースの場合、タイムアウト時間として計測される値はSQLiteデータベースのロック解除待ち時間となります。 |
キャッシュ保持時間 |
指定した時間、同コマンドのクエリー結果をサーバーのメモリ上にキャッシュします。「0」を指定した場合、キャッシュは行いません。既定値は「0」です。 キャッシュは同一のコマンドにおいて有効です。たとえSQL文が完全に同じであったとしても、異なるコマンドからの実行の場合には異なるキャッシュとなります。 |
各種データベースにおいて選択可能なパラメーターの型(ADO.NETにおけるデータ型)は次の通りです。
内部データベース(SQLite) | SQL Server | MySQL | Oracle | Postgre SQL |
---|---|---|---|---|
Boolean |
BigInt |
Decimal |
Char |
Boolean |
次のような「Products」テーブルからIDを指定してレコードを取得する例を示します。
サーバーサイドコマンドを1つ作成し、以下のようにパラメーターと戻り値を設定します。
パラメーターの名前は「svpID」、戻り値の名前は「商品名」です。
[SQLクエリーの実行]コマンドで以下のようにパラメーターとSQLクエリーを設定します。
[SQLクエリーの実行]コマンドのパラメーター名は「pID」と定義しています。これにサーバーサイドコマンドのパラメーターである「svpID」を受け渡しています。
[SQLクエリー]では、パラメータ名に文字「@」を付加する必要があることに注意してください。
[リターン(コマンドの終了)]コマンドでSQLクエリーコマンドの結果を返すように設定します。
[SQLクエリーの実行]コマンドの[戻り値を格納する変数名]に設定した「リターンレコード」を定義したサーバーサイドコマンドの戻り値である[商品名]に設定しています。
[サーバーサイドコマンドの呼び出し]コマンドで作成したサーバーサイドコマンドを呼び出すように設定します。
定義したパラメーター「svpID」にはセルの値を受け渡すように設定します。
定義した戻り値「商品名」はB5セルの値となるように設定します。
[JSONデータの設定(通常セル)]コマンドでB5セルにあるJSONデータから商品名を取り出して設定します。
この場合、B5セルの値は「[{"Name":"バナナ"}]」のようなJSONデータとなっています。[JSONパス]プロパティは空白のままとし、[キー]に「Name」を指定することで値をセルに設定できます。
[ホーム]リボンタブにあるデバッグの[開始]ボタンをクリックし、アプリケーションの動作を確認します。
[実行]ボタンをクリックすると、B2セルで指定した値をIDとして商品名が取得されてB8セルに表示されることを確認できます。
5,000レコードを一気に追加するような場合、繰り返しコマンドとテーブルデータの更新コマンドを使用して1件1件追加しようとすると時間がかかります。このようなケースではSQLクエリーの実行コマンドを使用することでパフォーマンスを改善できる可能性があります。
使用した設定 | 実行にかかる時間(参考値) | |
テーブルデータの更新コマンド | 10秒 | |
SQLクエリーの実行でINSERT文を使用 | 2秒 | |
SQLクエリーの実行でBULK INSERTを使用 |
※ BULK INSERTはSQL Serverでサポートされている構文です。 |
0.5秒 |