AstraRegul
Релиз 2024.08.31.00
×

4.2.2.3. SQL-запросы

 

Общие рекомендации по построению SQL-запросов

 
1. При построении SQL-запросов с объединением таблиц рекомендуется использовать оператор "JOIN" без дополнительных операндов. Общий вид запроса:
 
SELECT {столбцы} FROM {таблица_1} JOIN {таблица_2} ON {условие_объединения} WHERE {условие_запроса}
 
2. Объединять таблицы рекомендуется в следующем порядке:
в качестве {таблица_1} использовать таблицы nodes_values при запросе оперативных значений и nodes_history при запросе истории значений;
в качестве {таблица_2} использовать таблицу nodes.
 
3. Для получения оперативных значений или истории значений по имени сигнала рекомендуется использовать запрос следующего вида:
 
SELECT {столбцы} FROM {таблица_1} JOIN nodes ON nodes.NodeId={таблица_1}.NodeId WHERE nodes.TagName = '{Имя_сигнала}'
 

SQL-запросы к таблицам данных

 
Для изменения оперативных значений используется запрос "UPDATE" к таблице nodes_values. Например, запрос на изменение значения сигнала "NPS.BIK172_6.BB97n.Cmd" на значение "10" типа "integer" имеет вид:
UPDATE nodes_values SET valint=10 FROM nodes WHERE nodes.nodeid=nodes_values.nodeid AND nodes.TagName = 'NPS.BIK172_6.BB97n.Cmd'
 
Если новое значение сигнала не совпадает с типом сигнала, происходит попытка преобразования типа. Если преобразование невозможно, запрос завершается ошибкой.
 
Для вывода данных таблиц используется запрос "SELECT". Например, запрос на получение текущего значения сигнала "NPS.BIK172_6.BB97n.Cmd" имеет вид:
 
SELECT * FROM nodes_values JOIN nodes ON nodes.NodeId = nodes_values.NodeId WHERE nodes.TagName='NPS.BIK172_6.BB97n.Cmd'
 
Запрос на получение истории значений сигнала "NPS.BIK172_6.BB97n.Cmd" имеет вид:
SELECT * FROM nodes_history JOIN nodes ON nodes.NodeId = nodes_history.NodeId WHERE nodes.TagName = 'NPS.BIK172_6.BB97n.Cmd'
 

SQL-запросы к таблицам событий

 
Для вывода данных таблиц используется запрос "SELECT". Например, запрос на получение истории событий, у которых условия генерации события "DISCRETE", имеет вид:
SELECT * FROM event_history JOIN event_conditions ON event_history.Condition=event_conditions.Name WHERE Name='DISCRETE'