Получение данных из SQL-запросов
Разработчики баз данных могут определять именованные SQL-запросы в таблице xls.objects или в представлениях списков запросов.
Пользователи могут подключаться к этим запросам через мастера подключения SaveToDB и DBEdit, а также с помощью URL списка запросов в DBGate и ODataDB.
Вот пример для таблицы xls.objects:
ID | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | TABLE_CODE | INSERT_OBJECT | UPDATE_OBJECT | DELETE_OBJECT |
---|---|---|---|---|---|---|---|
s02 | code_cashbook | CODE | SELECT * FROM s02.cashbook |
Вот пример для представления списка запросов:
ID | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | TABLE_CODE | INSERT_PROCEDURE | UPDATE_PROCEDURE | DELETE_PROCEDURE | PROCEDURE_TYPE |
---|---|---|---|---|---|---|---|---|
s02 | code_cashbook | CODE | SELECT * FROM s02.cashbook |
Объекты на основе SQL-запросов аналогичны хранимым процедурам.
Для них можно сохранять изменения, использовать обработчики событий, настраивать списки значений, переводить имена, поля и параметры.
Кроме того, именованные SQL-запросы можно использовать так же, как хранимые процедуры в других таблицах конфигураций.
В таких объектах можно применять команды SELECT, EXEC, GRANT, REVOKE и другие. Однако для получения данных разрешено использовать только SELECT и EXEC.
Детали реализации
SaveToDB и DBEdit отправляют готовые SQL-запросы на сервер баз данных.
ODataDB создает объекты FunctionImport. DBGate формирует API вызовы, аналогичные хранимым процедурам.
Примеры SQL-запросов для получения данных
Ниже приведены примеры запросов для всех поддерживаемых платформ баз данных.
Обратите внимание, что SQL Server и SQLite используют параметры с префиксом @, в то время как другие платформы используют префикс в виде двоеточия.
SQL Server | MySQL | PostgreSQL | Oracle | Snowflake | SQLite
Пример SQL-запроса для получения данных из Microsoft SQL Server
SELECT t.id, CAST(t.[date] AS datetime) AS [date], t.account_id, t.item_id, t.company_id, t.debit, t.credit FROM s02.cashbook t WHERE COALESCE(@account_id, t.account_id, -1) = COALESCE(t.account_id, -1) AND COALESCE(@item_id, t.item_id, -1) = COALESCE(t.item_id, -1) AND COALESCE(@company_id, t.company_id, -1) = COALESCE(t.company_id, -1)
Пример SQL-запроса для получения данных из MySQL и PostgreSQL
SELECT t.id, t.date, t.account_id, t.item_id, t.company_id, t.debit, t.credit FROM s02.cashbook t WHERE COALESCE(:account_id, t.account_id, -1) = COALESCE(t.account_id, -1) AND COALESCE(:item_id, t.item_id, -1) = COALESCE(t.item_id, -1) AND COALESCE(:company_id, t.company_id, -1) = COALESCE(t.company_id, -1)
Пример SQL-запроса для получения данных из Oracle Database и Snowflake
SELECT t.ID, t."DATE", t.ACCOUNT_ID, t.ITEM_ID, t.COMPANY_ID, t.DEBIT, t.CREDIT FROM S02.CASHBOOK t WHERE COALESCE(:ACCOUNT_ID, t.ACCOUNT_ID, -1) = COALESCE(t.ACCOUNT_ID, -1) AND COALESCE(:ITEM_ID, t.ITEM_ID, -1) = COALESCE(t.ITEM_ID, -1) AND COALESCE(:COMPANY_ID, t.COMPANY_ID, -1) = COALESCE(t.COMPANY_ID, -1)
Пример SQL-запроса для получения данных из SQLite
SELECT t.id, t.date, t.account_id, t.item_id, t.company_id, t.debit, t.credit FROM cashbook t WHERE COALESCE(@account_id, t.account_id, -1) = COALESCE(t.account_id, -1) AND COALESCE(@item_id, t.item_id, -1) = COALESCE(t.item_id, -1) AND COALESCE(@company_id, t.company_id, -1) = COALESCE(t.company_id, -1)