Files
oper/DB/FUNCTIONS/FNC_IDM_GROUPS.sql
2023-06-08 11:55:59 -03:00

95 lines
3.2 KiB
SQL

--------------------------------------------------------
-- 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;
/