クエリの基本情報
「クエリ」ではHMIで使用するクエリを作成、保存することができます。
クエリとは、データベース上のテーブルに対して行う処理を記述したものです。
この画面ではクエリを新規作成、また作成したクエリの編集を行うことができます。
内容
クエリの作成
編集画面の操作
クエリID
保存されるクエリのクエリIDを変更できます。
使用できる文字はアルファベットの小文字と数値で構成した文字列です。
ほかの保存されているクエリと同じID名を持つクエリは作成できません。
概要
作成したクエリの説明を記述します。
クエリ種
作成されるクエリの種類を設定します。
種類は「取得」、「更新」、「追加」、「削除」の4つで それぞれクエリにおける「SELECT」、「UPDATE」、「ADD」、「DELETE」に対応します。
「取得」とはテーブルに保存されているレコード(データ)の中から条件に合うレコードを取得もしくは検索することです。
「更新」とはテーブルに保存されているレコードの中から条件に合うレコードの値を変更することです。
「追加」とはテーブルに新たにレコードを追加することです。
「削除」とはテーブルに保存されているレコードの中から条件に合うレコードを削除することです。
参照先データベース
クエリによって操作するデータベースを選択します。
「内部データベース」を選択すると、CONPROSYS HMI System (CHS)で使用しているデータベースに接続します。
「外部データベース」を選択すると、CONPROSYS HMI System (CHS)ではないサーバー上の別のデータベース(PostgreSQL or MySQL)に接続します。
詳しくは外部データベースへの接続をご覧ください。
テーブル名
クエリを実行する、テーブル名を設定します。
ここで選択できるテーブル名の一覧は「テーブル」で作成されたものです。
ロック機能
ロックボタン:ボタンをクリックすることで設定したクエリにロックをかけることができます。ロックされたクエリは、adminとロックした本人以外の他人に変更されることがありません。
解除ボタン:ボタンをクリックすることでロックを解除することもできます。ロック解除は、ロックした本人とadminしか解除できません。
クエリの作成
「テーブル名」の選択を終えることで、クエリの作成と保存が可能になります。
「クエリ種」で何を選ぶかによりクエリを作成する手順が異なります。
下記ではクエリ種ごとの設定方法について説明していきます。
取得
「取得」選択時は「出力データ」、「条件」、「高度」の3つのエリアが表示されます。
「出力データ」の「カラム名」には取得したいカラム名を、「ファンクション」には集約関数を設定します。
「キーフィールド」はHMIデータ・リンクで使用するキーフィールドを設定します。クエリの結果を簡単にアクセスために使用するフィールドです。
下に存在する「追加」と「全てのカラムの追加」ボタンを押し、出力したいカラムを設定します。
集約関数を使用し複数の値が取りたい場合、または集約関数を使用しないカラムに対して「高度」でグループ化を行ってください。
「条件」はデータをフィルタリング条件を設定します。詳しくは下の条件の設定をご覧ください。
下に存在する「追加」ボタンを押し、条件式を増やすことができます。
「高度」は取得データの重複、並び替え、グループ化について設定します。
重複データを除きたい場合は 、「重複なし」にチェックを入れます
取得される値が複数ある場合は「並び替え」を設定することを推奨します。(設定しない場合、クエリ実行の結果の並び順が実行する度、異なることがあるため)
「出力データ」、「並び替え」、「グループ化」では、同じカラム名を使用した列は設定しないでください。
更新
「更新」選択時は、「条件」、「書き込みデータ」の2つのエリアが表示されます。
「条件」は更新したいデータの条件を設定します。詳しくは下の条件の設定をご覧ください。
下に存在する「追加」ボタンを押し、条件式を増やすことができます。
「書き込みデータ」では更新するデータを設定できます。
更新する値に変数を設定することでデバイスの値、HMIの変数を使用することができます。
下に存在する「追加」と「全てのカラムの追加」ボタンを押し、更新したいカラムを増やせます。
「書き込みデータ」では、同じカラム名は使用した列は設定しないでください。
追加
「追加」選択時は、「書き込みデータ」のエリアが表示されます。
「書き込みデータ」では追加するデータを設定します。
「書き込みデータ」で設定しないカラムにはテーブルで設定されているデフォルト値が挿入されます。
下に存在する「追加」と「全てのカラムの追加」ボタンを押し、追加したいカラムを増やせます。
「書き込みデータ」では、同じカラム名は使用した列は設定しないでください。
削除
「削除」選択時は、「条件」のエリアが表示されます。
「条件」は削除したいデータの条件を設定します。詳しくは下の条件の設定をご覧ください。
下に存在する「追加」ボタンを押し、条件式を増やすことができます。
作成したクエリの確認
「作成したクエリの確認」を押すと編集画面の設定からpostgresqlの文法に沿ったクエリ(SQL文)が表示されます。
作成したクエリを確認したい場合、この機能を使用してください。
また簡単なエラーチェックも行います。
クエリ作成例
例1):全レコードのうちカラム名a(以下カラムa)の値が最大であるレコードのカラムbとカラムcの値が取得したい場合(テーブルのカラムはa,b,cの3つ)
クエリ種のラジオボタンで"取得"を選択します。
「出力データ」で「カラムの追加」を押し、「出力データ」にカラムa、カラムb、カラムcを追加します。次にカラムaの「ファンクション」で「MAX」を選択します。
条件は例1の場合必要ありません。
「高度」ではカラムb、カラムcの値を取得するため、「グループ化」にカラムb、カラムcを追加します。
最後に「作成されるSQL文の確認」を押し、表示されるSQL文に問題がないことを確認し、保存のボタンを押しクエリの作成は完了です。
表示される結果
例:select max(a) , b , c from dbo.example_table1 group by b, c;
例2):テーブルの全レコードのうち_timestamp_の値が1週間前から今日の12時までのカラムbの値のを0に更新したい場合
クエリ種のラジオボタンで"更新"を選択します。
例2の場合、「条件」は以下のようになります。
上2列が”_timestamp_の値が1週間前から今日まで”を表しています。
「書き込みデータ」では"カラムbを0に更新"するため、カラムbを追加し値を「固定値」の入力データを0にし設定します。
最後に「作成されるSQL文の確認」を押し、表示されるSQL文に問題がないことを確認し、保存のボタンを押しクエリの作成は完了です。
表示される結果
例:update dbo.example_table set _timestamp_ = default , b = '0' where _timestamp_ >= date_trunc('day', current_timestamp) - cast('1 week' AS INTERVAL) and _timestamp_ <= date_trunc('day', current_timestamp) + CAST('12 hours' AS INTERVAL);
更新時に、「書き込みデータ」に_timestamp_を指定しない場合,SQL文に"_timestamp_ = default"が追加される点について留意してください。
(カラム名"_id_","_timestamp_"について詳しくは作成されるテーブルについてをご覧ください。)
例3):テーブルにカラムaの値が"VALUE" カラムbの値が変数"dt:dID.cID:tName"のデータを追加する場合
クエリ種のラジオボタンで"追加"を選択します。
「書き込みデータ」で「カラムの追加」を押し、カラムa、カラムb、を追加します。
次に追加したカラムaを値を「固定値」に、入力データにVALUEを設定し、カラムbを値を「変数」に、入力データにdt:dID.cID:tNameを選択します。
最後に「作成されるSQL文の確認」を押し、表示されるSQL文に問題がないことを確認し、保存のボタンを押しクエリの作成は完了です。
表示される結果
例:insert into dbo.example_table ( a , b ) values ( "VALUE" , dt:dID.cID:tName );
追加時に、値が指定されなかったカラムにはそのカラムのデフォルト値がセットされます。 デフォルト値はテーブルの構造編集で設定された値です。
例4):テーブルの中でカラムaの値が"VALUE"のレコードのうち、カラムbの値が0もしくはNULLのレコードを削除したい場合
クエリ種のラジオボタンで"削除"を選択します。
例4の場合、「条件」は以下のようになります。
右端セレクトボックスの"OR"と"AND"の指定箇所に注意してください。
最後に「作成されるSQL文の確認」を押し、表示されるSQL文に問題がないことを確認し、保存のボタンを押しクエリの作成は完了です。
表示される結果
例:delete from dbo.example_table where a = 'VALUE' and b = '0' or a = 'VALUE' and b isNULL;