在oracle创建Split和Map函数

create or replace TYPE T_VARCHAR2_LIST AS TABLE OF VARCHAR2(200);

  /

  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;

  /

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值