jde_exec_blocks/32_-2.sql

85 lines
3.0 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

--TIM140324 16:20 ID = 2252083434564588; VID = 32; TIP = -1 [{"1111":"2252131285821281","2222":"2252131285821282"},{"3333":"2252131285821283"}] [{"8666":"2252131285821288"}]
--EXECUTE BLOCK MPDRIVER: РАСПАРСИВАНИЕ ПАРАМЕТРОВ В ФОРМАТЕ JSON (МАССИВ ОБЪЕКТОВ) В ОТДЕЛЬНЫЕ ЗАПИСИ (MOTIV 37006)
EXECUTE BLOCK (
IN_PARAM_JSON TYPE OF COLUMN APP_EVENT.APP_EVENT_PARAM = :IN_PARAM_JSON
)
RETURNS (
OUT_APP_PARAM_STR D_STR1024,
OUT_APP_PARAM_TIP d_str1024
)
AS
DECLARE VARIABLE FBLOB TYPE OF D_BLOB_STR;
DECLARE VARIABLE FBLOB1 TYPE OF D_BLOB_STR;
DECLARE VARIABLE FBLOB2 TYPE OF D_BLOB_STR;
DECLARE VARIABLE FPR D_PRIZNAK;
DECLARE VARIABLE FINDEX D_INTEGER;
DECLARE VARIABLE FNM D_INTEGER;
DECLARE VARIABLE FNM2 D_INTEGER;
BEGIN
/*
TIM140324 16:20
*/
--EXECUTE BLOCK MPDRIVER: РАСПАРСИВАНИЕ ПАРАМЕТРОВ В ФОРМАТЕ JSON (МАССИВ ОБЪЕКТОВ) В ОТДЕЛЬНЫЕ ЗАПИСИ (MOTIV 37006)
--ID_EXEC_BLOCKS = 2252083434564588
--EXEC_BLOCKS.VID = 32 (VLST.ID_VLST = 19104)
--EXEC_BLOCKS.TIP = -1 (LST.ID_VLST = 19138, LST.LST_INDEX = -1)
--*********** ВХОДНЫЕ ПАРАМЕТРЫ: ***************
--IN_PARAM_JSON: СТРОКА ПАРАМЕТРОВ В ФОРМАТЕ JSON (МАССИВ ОБЪЕКТОВ)
--*********** ВЫХОДНЫЕ ПАРАМЕТРЫ: ***************
--OUT_APP_PARAM_STR: СТРОКОВОЕ ЗНАЧЕНИЕ ПАРАМЕТРА
--OUT_APP_PARAM_TIP: ТИП ПАРАМЕТРА
--*********** ИНИЦИАЛИЗАЦИЯ: ***************
IN_PARAM_JSON = TRIM(COALESCE(:IN_PARAM_JSON, ''));
IF (:IN_PARAM_JSON <> '') THEN
BEGIN
FPR = 1;
FINDEX = 1;
WHILE (:FPR = 1) DO
BEGIN
SELECT JSON_GET_ARRAY_ITEM (:IN_PARAM_JSON, :FINDEX, 1)
FROM RDB$DATABASE
INTO :FBLOB;
IF (:FBLOB IS NULL)
THEN FPR = 0;
ELSE
BEGIN
FBLOB = SUBSTRING(:FBLOB FROM 2 FOR CHAR_LENGTH(:FBLOB) - 2);
FNM2 = 1;
FOR SELECT OUT_STRING_ONE
FROM P_GEN_LIST_STRING_BLOB (:FBLOB, '","')
INTO :FBLOB1 DO
BEGIN
FNM = 1;
IF (:FNM2 = 1)
THEN FBLOB1 = SUBSTRING(:FBLOB1 FROM 2 FOR CHAR_LENGTH(:FBLOB1));
ELSE FBLOB1 = SUBSTRING(:FBLOB1 FROM 1 FOR CHAR_LENGTH(:FBLOB1) - 1);
FOR SELECT TRIM(COALESCE(OUT_STRING_ONE, ''))
FROM P_GEN_LIST_STRING_BLOB (:FBLOB1, '":"')
INTO :FBLOB2 DO
BEGIN
IF (:FNM = 1) THEN
OUT_APP_PARAM_TIP = CAST(:FBLOB2 AS d_str1024);
ELSE
IF (:FNM = 2) THEN
BEGIN
IF (POSITION('","', :FBLOB) = 0)
THEN OUT_APP_PARAM_STR = SUBSTRING(:FBLOB2 FROM 1 FOR CHAR_LENGTH(:FBLOB2) - 1);
ELSE OUT_APP_PARAM_STR = :FBLOB2;
-- OUT_APP_PARAM_STR = :FBLOB2;
END
FNM = :FNM + 1;
END
FNM2 = :FNM2 + 1;
SUSPEND;
END
FINDEX = :FINDEX + 1;
END
END
END
END