/
create or replace
FUNCTION F_SPLIT_STRING(
p_source VARCHAR2, p_delimiter VARCHAR2
) RETURN T_VARCHAR2_LIST
AS
v_layer_rate_list T_VARCHAR2_LIST := T_VARCHAR2_LIST();
var_tmp VARCHAR2(4000);
var_element VARCHAR2(4000);
BEGIN
var_tmp := p_source;
WHILE instr(var_tmp, p_delimiter)>0 LOOP
var_element := substr(var_tmp, 1, instr(var_tmp, p_delimiter)-1);
var_tmp := substr(var_tmp,instr(var_tmp, p_delimiter) + length(p_delimiter),length(var_tmp));
IF (var_element IS NOT NULL) AND (var_element != p_delimiter) THEN
v_layer_rate_list.extend(1);
v_layer_rate_list(v_layer_rate_list.count) := var_element;
END IF;
END LOOP;
IF (var_tmp IS NOT NULL) AND (var_tmp != p_delimiter) THEN
v_layer_rate_list.extend(1);
v_layer_rate_list(v_layer_rate_list.count) := var_tmp;
END IF;
RETURN v_layer_rate_list;
END F_SPLIT_STRING;
/
create or replace
TYPE T_STRING_MAP AS TABLE OF T_STRING_ENTRY;
/
create or replace
TYPE T_STRING_ENTRY AS OBJECT (
c_key VARCHAR2(200), c_value VARCHAR2(200)
);
/
create or replace
FUNCTION f_PARSE_STRING_TO_MAP(
p_oringal_string VARCHAR2, p_entry_delimiter VARCHAR2, p_key_delimeter VARCHAR2
) RETURN T_STRING_MAP
AS
v_entry_list T_VARCHAR2_LIST;
v_string_map T_STRING_MAP := T_STRING_MAP();
v_string_entry T_STRING_ENTRY := T_STRING_ENTRY(NULL,NULL);
v_int NUMBER(4);
BEGIN
v_entry_list := F_SPLIT_STRING(p_oringal_string, p_entry_delimiter);
FOR l_entry IN v_entry_list.first..v_entry_list.last
LOOP
v_int := instr(v_entry_list(l_entry), p_key_delimeter);
v_string_entry.c_key := substr(v_entry_list(l_entry), 0, v_int-1);
v_string_entry.c_value := substr(v_entry_list(l_entry), v_int+length(p_key_delimeter));
v_string_map.extend;
v_string_map(v_string_map.count) := v_string_entry;
END LOOP;
RETURN v_string_map;
END f_PARSE_STRING_TO_MAP;
/