動的なデータベースクエリ

  • 作成者:ayuan0625
  • 編集回数:2次
  • 最終更新:ayuan0625 于 2021-09-28
  • 1.説明

    1.1問題説明

    実際運用する時、特に検索画面には、固定的なデータセットではなく、動的にSQL文を実行する場合が多いです。


    1.2実現方法

    例文:SELECT * FROM 販売量 WHERE 地域 = '${p_area}'

    ①動的に検索条件の値をSQL文に入れることができます

      例えば検索ウィジェット「地域」のウィジェット名は「p_area」の場合、変数「p_area」でウィジェットの値を取得できます

    ②SQL文にFineReport数式を利用できます

      ${}中の内容はFineReport数式で処理する


    2.事例

    2.1検索条件は空白の場合全ての結果を抽出

    データセット設定

    SELECTFROM 販売量 WHERE 1=1 ${if(len(p_area)!=0,"AND 地域 = '"+p_area+"'","")}

    注意:${}中の内容はFineReport数式として処理する

    注意:数式if()でロジック処理行う

    注意:数式len()でp_area変数の桁数を取得する


    「p_area」に値がある場合、下記のSQL文を実行

    SELECT * FROM 販売量 WHERE 1=1


    「p_area」に値がある場合(例えばp_areaは関東)、下記のSQL文を実行

    SELECT * FROM 販売量 WHERE 1=1 AND 地域 = '関東'

    1.gif


    2.2プルダウンチェックボックスウィジェットの場合WHERE条件の書き方

    例えば検索条件「地域」の選択しは「関東、関西、近畿」の場合

    ウィジェット設定

    最終的に「p_area」の値は「関東','関西','近畿」になります

    2.png


    データセット設定

    SELECT * FROM 販売量 WHERE 地域 IN ('${p_area}')


    最終的で下記のSQL文を実行

    SELECT * FROM 販売量 WHERE 地域 IN ('関東','関西','近畿')


    検索条件が空白の場合全ての結果を抽出

    SELECT * FROM 販売量

    WHERE 1=1 ${if(len(p_area)!=0,"AND 地域 IN ("+p_area+")","")}

    2.gif


    2.3二つDB間の関連検索

    例えば

    販売員情報はDB1に保存、データ接続名はDB1

    販売量情報はDB2に保存、データ接続名はDB2

    二つDB何のでSQLのJOIN操作はできません。販売員「Aさん」が所属する地域の販売量情報を取得したい場合、下記のSQL()数式で実現できます

    SELECT * FROM 販売量

    WHERE 地域 = '${SQL("DB1","SELECT 地域 FROM 販売量 WHERE 販売員 = 'Aさん'",1,1)}'

    3-1.png

    注意:SQL()の使い方は数式編集画面に確認できます

    3-2.png


    2.4変数の区切り文字がコンマ

    例えば「関東,関西,近畿」の場合、SQLの文法と合わないのでそのまま利用できません、数式REPLACE()で変換する必要があります。

    例文:

    SELECT * FROM 販売量 WHERE 地域 IN ('${REPLACE(p_area,",","','")}')

    4-1.png

    注意:REPLACE()の使い方は数式編集画面に確認できます

    4-2.png


    3.テンプレート

    検索条件は空白の場合全ての結果を抽出

    変数(パラメータ)付きのデータセット-1.cpt

    プルダウンチェックボックスウィジェットの場合WHERE条件の書き方

    変数(パラメータ)付きのデータセット-2.cpt

    二つDB間の関連検索

    変数(パラメータ)付きのデータセット-3.cpt


    Attachment List


    Theme: FineReport パラメータ
    既に最初
    既に最後
    • Helpful
    • Not helpful
    • Only read