85 lines
3.0 KiB
MySQL
85 lines
3.0 KiB
MySQL
|
--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
|