Получение данных из SQL-запросов

Получение данных из SQL-запросов

Разработчики баз данных могут определить именованные SQL-запросы в таблице xls.objects или представлениях списков запросов.

Пользователи могут подключаться к таким запросам в мастерах подключения SaveToDB и DBEdit, или, используя URL списка запросов, в DBGate и ODataDB.

Ниже приведен пример для таблицы xls.objects:

IDTABLE_SCHEMATABLE_NAMETABLE_TYPETABLE_CODEINSERT_OBJECTUPDATE_OBJECTDELETE_OBJECT
s02code_cashbookCODESELECT * FROM s02.cashbook

Ниже приведен пример для представления списка запросов:

IDTABLE_SCHEMATABLE_NAMETABLE_TYPETABLE_CODEINSERT_PROCEDUREUPDATE_PROCEDUREDELETE_PROCEDUREPROCEDURE_TYPE
s02code_cashbookCODESELECT * FROM s02.cashbook

Объекты на основе запросов SQL аналогичны хранимым процедурам.

Для них можно сохранять изменения, использовать события изменений, настраивать списки значений, переводить имена, поля и параметры.

Более того, именованные SQL-запросы можно использовать аналогично хранимым процедурам в других таблицах конфигураций.

В таких объектах можно использовать команды SELECT, EXEC, GRANT, REVOKE и другие. Однако, для получения данных можно использовать только SELECT и EXEC.

Детали реализации

SaveToDB и DBEdit посылают готовые запросы SQL на сервер баз данных.

ODataDB создает объекты FunctionImport. DBGate создает API вызова, аналогичный хранимым процедурам.

Примеры SQL запросов для получения данных

Ниже приведены примеры запросов для всех поддерживаемых платформ баз данных.

Обратите внимание, что SQL Server, SQL Server Compact и SQLite используют параметры с префиксом @, тогда как остальные платформы с префиксом в виде двоеточия.

SQL Server | MySQL | PostgreSQL | Oracle | DB2 | NuoDB | Snowflake | SQL CE | 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 and 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, IBM DB2, NuoDB, and 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-запроса для получения данных из SQL Server Compact and 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)