Forguncy 8 オンラインヘルプ
Forguncyの使い方 / サーバーオブジェクト / コマンド(サーバーサイド) / SQLクエリーの実行
このトピックで
    SQLクエリーの実行
    このトピックで

    接続するデータベースに対して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」を指定した場合、タイムアウト時間は無制限です。既定値は「0」です。タイムアウトした場合にはエラーコード「500」が返ります。

    なお、本タイムアウト値はデータベースとの通信部分で計測される値であり、本コマンド全体の実行時間と同じではないことに注意してください。本コマンドの実行時間が指定した実行のタイムアウト時間を超えていても、タイムアウトにはならない場合があります。

    また、内部データベースの場合、タイムアウト時間として計測される値はSQLiteデータベースのロック解除待ち時間となります。

    キャッシュ保持時間

    指定した時間、同コマンドのクエリー結果をサーバーのメモリ上にキャッシュします。「0」を指定した場合、キャッシュは行いません。既定値は「0」です。

    キャッシュは同一のコマンドにおいて有効です。たとえSQL文が完全に同じであったとしても、異なるコマンドからの実行の場合には異なるキャッシュとなります。

    パラメーターの型

    各種データベースにおいて選択可能なパラメーターの型(ADO.NETにおけるデータ型)は次の通りです。

    内部データベース(SQLite) SQL Server MySQL Oracle Postgre SQL

    Boolean
    Currency
    Decimal
    Double
    Int16
    Int32
    Int64
    Single
    String
    UInt16
    UInt32
    UInt64

    BigInt
    Bit
    Char
    DateTime
    Decimal
    Float
    Int
    Money
    NChar
    NVarChar
    Real
    TinyInt
    VarChar
    Date
    Time
    DateTime2
    SmallDateTime
    SmallInt
    SmallMoney

    Decimal
    Int16
    Int32
    Float
    Double
    Timestamp
    Int64
    Int24
    Date
    Time
    DateTime
    Year
    VarChar
    UInt16
    UInt32
    UInt64
    UInt24
    TinyText
    MediumText
    LongText
    Text

    Char
    Double
    Int16
    Int32
    Int64
    NChar
    NVarchar2
    Varchar2

    Boolean
    Char
    Date
    Double
    Integer
    Money
    Numeric
    Real
    Smallint
    Text
    Time
    Timestamp
    Varchar

    使い方

    次のような「Products」テーブルからIDを指定してレコードを取得する例を示します。

    1. サーバーサイドコマンドを1つ作成し、以下のようにパラメーターと戻り値を設定します。

      パラメーターの名前は「svpID」、戻り値の名前は「商品名」です。

    2. [SQLクエリーの実行コマンドで以下のようにパラメーターとSQLクエリーを設定します。

      [SQLクエリーの実行]コマンドのパラメーター名は「pID」と定義しています。これにサーバーサイドコマンドのパラメーターである「svpID」を受け渡しています。

      [SQLクエリー]では、パラメータ名に文字「@」を付加する必要があることに注意してください。

    3. [リターン(コマンドの終了)コマンドでSQLクエリーコマンドの結果を返すように設定します。

      [SQLクエリーの実行]コマンドの[戻り値を格納する変数名]に設定した「リターンレコード」を定義したサーバーサイドコマンドの戻り値である[商品名]に設定しています。

    4. [サーバーサイドコマンドの呼び出し]コマンドで作成したサーバーサイドコマンドを呼び出すように設定します。

      定義したパラメーター「svpID」にはセルの値を受け渡すように設定します。

      定義した戻り値「商品名」はB5セルの値となるように設定します。

    5. [JSONデータの設定(通常セル)]コマンドでB5セルにあるJSONデータから商品名を取り出して設定します。

      この場合、B5セルの値は「[{"Name":"バナナ"}]」のようなJSONデータとなっています。[JSONパス]プロパティは空白のままとし、[キー]に「Name」を指定することで値をセルに設定できます。

    6. [ホーム]リボンタブにあるデバッグの[開始]ボタンをクリックし、アプリケーションの動作を確認します。

      [実行]ボタンをクリックすると、B2セルで指定した値をIDとして商品名が取得されてB8セルに表示されることを確認できます。

    テーブルデータの更新よりもSQLクエリーの実行を検討すべきケースの例

    5,000レコードを一気に追加するような場合、繰り返しコマンドとテーブルデータの更新コマンドを使用して1件1件追加しようとすると時間がかかります。このようなケースではSQLクエリーの実行コマンドを使用することでパフォーマンスを改善できる可能性があります。

    使用した設定 実行にかかる時間(参考値)
    テーブルデータの更新コマンド 10秒
    SQLクエリーの実行でINSERT文を使用 2秒

    SQLクエリーの実行でBULK INSERTを使用

    ※ BULK INSERTはSQL Serverでサポートされている構文です。

    0.5秒