Списки значений из хранимых процедур
Для получения списков значений параметров и списков значений ячеек можно использовать хранимые процедуры.
Использование хранимых процедур является лучшим выбором, т.к. позволяет возвращать списки на разных языках.
Ниже приведен пример настройки в таблице 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 | DB2 | NuoDB | 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; /
Пример получения списка значений хранимой процедурой для IBM DB2
--#SET TERMINATOR %% CREATE PROCEDURE S02.XL_LIST_COMPANY_ID ( DATA_LANGUAGE CHAR(2) ) DYNAMIC RESULT SETS 1 READS SQL DATA DETERMINISTIC CALLED ON NULL INPUT COMMIT ON RETURN NO LANGUAGE SQL P1: BEGIN DECLARE Cursor1 CURSOR WITH RETURN FOR 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; OPEN Cursor1; END P1 %% --#SET TERMINATOR ;
Пример получения списка значений хранимой процедурой для NuoDB
CREATE PROCEDURE S02.XL_LIST_COMPANY_ID ( DATA_LANGUAGE CHAR(2) ) RETURNS tmp_tab ( ID INTEGER, NAME VARCHAR(50) ) AS INSERT INTO tmp_tab 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_PROCEDURE @@
Пример получения списка значений хранимой процедурой для Snowflake
Snowflake поддерживает хранимые процедуры на языке JavaScript, которые используются аналогично.