Списки значений из хранимых процедур
Для получения списков значений параметров и списков значений ячеек можно использовать хранимые процедуры.
Использование хранимых процедур — это предпочтительный подход, так как он позволяет возвращать списки на разных языках.
Ниже приведен пример настройки в таблице xls.handlers для хранимых процедур.
ID | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | EVENT_NAME | HANDLER_SCHEMA | HANDLER_NAME | HANDLER_TYPE | HANDLER_CODE | TARGET_WORKSHEET | MENU_ORDER | EDIT_PARAMETERS |
---|---|---|---|---|---|---|---|---|---|---|---|
s02 | usp_cashbook | company_id | ValidationList | s02 | xl_list_company_id | PROCEDURE | |||||
s02 | usp_cashbook | company_id | ParameterValues | s02 | xl_list_company_id | PROCEDURE |
Примеры получения списков значений хранимыми процедурами
Ниже приведены примеры хранимых процедур для получения списков значений для всех поддерживаемых платформ баз данных.
Используйте эти решения для получения данных.
Все примеры процедур возвращают колонки id
и name
из таблицы s02.companies
.
Кроме того, в процедурах показан простой способ перевода списков значений на любой язык с использованием таблицы xls.translations
и параметра @data_language
.
Конечно, можно реализовать собственное решение для перевода или просто использовать обычный SELECT, например:
SELECT id, name FROM s02.company ORDER BY name, id
Больше примеров можно найти в Sample 02 - Advanced Features из SaveToDB SDK.
SQL Server | MySQL | PostgreSQL | Oracle | Snowflake
Пример получения списка значений хранимой процедурой для Microsoft SQL Server
Обратите внимание на команду SET NOCOUNT ON
, которая необходима для использования хранимых процедур SQL Server в Microsoft Excel.
CREATE PROCEDURE [s02].[xl_list_company_id] @data_language char(2) = NULL AS BEGIN SET NOCOUNT ON SELECT c.id, COALESCE(t.TRANSLATED_NAME, c.name) AS name FROM s02.companies c LEFT OUTER JOIN xls.translations t ON t.TABLE_SCHEMA = 's02' AND t.TABLE_NAME = 'strings' AND t.LANGUAGE_NAME = @data_language AND t.COLUMN_NAME = c.name ORDER BY name, id END
Пример получения списка значений хранимой процедурой для MySQL
CREATE PROCEDURE s02.xl_list_company_id ( data_language char(2) ) BEGIN SELECT c.id, COALESCE(t.TRANSLATED_NAME, c.name) AS name FROM s02.companies c LEFT OUTER JOIN xls.translations t ON t.TABLE_SCHEMA = 's02' AND t.TABLE_NAME = 'strings' AND t.LANGUAGE_NAME = data_language AND t.COLUMN_NAME = c.name ORDER BY name, id; END //
Пример получения списка значений хранимой процедурой для PostgreSQL
CREATE OR REPLACE FUNCTION s02.xl_list_company_id ( data_language varchar(2) ) RETURNS table ( id integer, name varchar ) LANGUAGE plpgsql SECURITY DEFINER AS $$ BEGIN RETURN QUERY SELECT c.id, COALESCE(t.TRANSLATED_NAME, c.name) AS name FROM s02.companies c LEFT OUTER JOIN xls.translations t ON t.TABLE_SCHEMA = 's02' AND t.TABLE_NAME = 'strings' AND t.LANGUAGE_NAME = data_language AND t.COLUMN_NAME = c.name ORDER BY name NULLS FIRST, id NULLS FIRST; END $$;
Пример получения списка значений хранимой процедурой для Oracle Database
CREATE PROCEDURE S02.XL_LIST_COMPANY_ID ( DATA_LANGUAGE CHAR, DATA OUT SYS_REFCURSOR ) AS BEGIN OPEN DATA FOR SELECT c.ID, COALESCE(t.TRANSLATED_NAME, N'' || c.NAME) AS NAME FROM S02.COMPANIES c LEFT OUTER JOIN XLS.TRANSLATIONS t ON t.TABLE_SCHEMA = 's02' AND t.TABLE_NAME = 'strings' AND t.LANGUAGE_NAME = DATA_LANGUAGE AND t.COLUMN_NAME = c.NAME ORDER BY NAME, ID; END; /
Пример получения списка значений хранимой процедурой для Snowflake
Snowflake поддерживает хранимые процедуры на языке JavaScript, которые используются аналогично.