95 lines
3.2 KiB
MySQL
95 lines
3.2 KiB
MySQL
|
|
--------------------------------------------------------
|
||
|
|
-- DDL for Function FNC_IDM_GROUPS
|
||
|
|
--------------------------------------------------------
|
||
|
|
|
||
|
|
CREATE OR REPLACE EDITIONABLE FUNCTION "ENVX_OPER"."FNC_IDM_GROUPS" (
|
||
|
|
pi_group_list IN CLOB
|
||
|
|
) RETURN CLOB AS
|
||
|
|
v_input_string VARCHAR2(4000) := pi_group_list;
|
||
|
|
v_output_json CLOB := '';
|
||
|
|
v_domain_table sys.odcivarchar2list;
|
||
|
|
v_json_obj json;
|
||
|
|
v_domain_name VARCHAR2(100) := '';
|
||
|
|
v_domain_aux VARCHAR2(100) := '';
|
||
|
|
v_group_name VARCHAR2(100) := '';
|
||
|
|
v_element NUMBER := 1;
|
||
|
|
BEGIN
|
||
|
|
IF pi_group_list IS NULL THEN
|
||
|
|
RETURN NULL;
|
||
|
|
ELSE
|
||
|
|
|
||
|
|
-- Parse comma-separated string into a table
|
||
|
|
v_domain_table := sys.odcivarchar2list();
|
||
|
|
v_domain_table.extend(regexp_count(
|
||
|
|
v_input_string,
|
||
|
|
','
|
||
|
|
) + 1);
|
||
|
|
v_output_json := '{';
|
||
|
|
FOR i IN 1..v_domain_table.count LOOP
|
||
|
|
v_domain_table(i) := regexp_substr(
|
||
|
|
v_input_string,
|
||
|
|
'[^,]+',
|
||
|
|
1,
|
||
|
|
i
|
||
|
|
);
|
||
|
|
v_domain_name := replace(
|
||
|
|
nvl(
|
||
|
|
regexp_substr(
|
||
|
|
v_domain_table(i),
|
||
|
|
'(.+)(\/)',
|
||
|
|
1,
|
||
|
|
1
|
||
|
|
),
|
||
|
|
'others'
|
||
|
|
),
|
||
|
|
'/',
|
||
|
|
''
|
||
|
|
);
|
||
|
|
v_group_name := regexp_substr(
|
||
|
|
v_domain_table(i),
|
||
|
|
'(.+\/)?(.+)',
|
||
|
|
1,
|
||
|
|
1,
|
||
|
|
NULL,
|
||
|
|
2
|
||
|
|
);
|
||
|
|
|
||
|
|
IF v_domain_aux IS NULL THEN
|
||
|
|
v_output_json := v_output_json
|
||
|
|
|| '"'
|
||
|
|
|| v_domain_name
|
||
|
|
|| '":[';
|
||
|
|
v_domain_aux := v_domain_name;
|
||
|
|
ELSIF v_domain_aux != v_domain_name THEN
|
||
|
|
v_output_json := v_output_json
|
||
|
|
|| '],"'
|
||
|
|
|| v_domain_name
|
||
|
|
|| '":[';
|
||
|
|
v_domain_aux := v_domain_name;
|
||
|
|
v_element := 1;
|
||
|
|
END IF;
|
||
|
|
|
||
|
|
v_output_json := v_output_json
|
||
|
|
|| (
|
||
|
|
CASE
|
||
|
|
WHEN v_element != 1 THEN
|
||
|
|
','
|
||
|
|
ELSE ''
|
||
|
|
END
|
||
|
|
)
|
||
|
|
|| '"'
|
||
|
|
|| v_group_name
|
||
|
|
|| '"';
|
||
|
|
v_element := v_element + 1;
|
||
|
|
END LOOP;
|
||
|
|
v_output_json := v_output_json || ']}';
|
||
|
|
RETURN v_output_json;
|
||
|
|
END IF;
|
||
|
|
|
||
|
|
EXCEPTION
|
||
|
|
WHEN OTHERS THEN
|
||
|
|
RETURN NULL;
|
||
|
|
END;
|
||
|
|
|
||
|
|
/
|