Списки значений из хранимых процедур
Для получения списков значений параметров и списков значений ячеек можно использовать хранимые процедуры.
Использование хранимых процедур — это предпочтительный подход, так как он позволяет возвращать списки на разных языках.
Ниже приведен пример настройки в таблице 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, которые используются аналогично.