From b37357ae8c110579d39826b4480728bbbe6954a3 Mon Sep 17 00:00:00 2001 From: Ernest Litvinenko Date: Fri, 5 Jul 2024 00:46:47 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BB=20EXEC=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BE=D1=81=D0=BD=D0=BE=D0=B2=D0=B5=2032=20-1?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D0=9F=D0=B0=D1=80=D1=81=D0=B8=D0=BD?= =?UTF-8?q?=D0=B3=D0=B0=20JSON=20=D0=B2=20=D0=B2=D0=B8=D0=B4=D0=B5=20?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0=20->=20=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 32_-2.sql | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 32_-2.sql diff --git a/32_-2.sql b/32_-2.sql new file mode 100644 index 0000000..d057bb1 --- /dev/null +++ b/32_-2.sql @@ -0,0 +1,85 @@ +--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 \ No newline at end of file