A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

自己写的代码,请各位大神多多指点,看看哪里还可以进行效率优化,与君共勉{:2_32:}
create or replace function func_str_inArray(p_target varchar2,
                                            p_str_array varchar2)
return varchar2 is
  v_flag varchar2(1);
  v_comma_loc int;
  v_cut_string varchar2(300);
  v_rest_string varchar2(2000);
begin
  ------------------------
  --p_target 不能包含","!!!注意!!
  --info:这个函数用于识别目标字符串,是否在一串用“,”分开的字符串内
  ------------------------
  v_flag := 'N';
  v_comma_loc := instr(p_str_array, ',');         --instr判断逗号的位置
  --如果是对比字符串是空,则返回false
  if nvl(p_str_array, '') = '' then
    return 'N';
  end if;
  --如果没有逗号,直接比较
  if length(p_str_array) > 0 and v_comma_loc = 0 then
    if p_target = p_str_array then
      return 'Y';
    else
      return 'N';
    end if;
  end if;
  v_rest_string := p_str_array;
  while v_comma_loc > 0 loop
    v_cut_string := substr(v_rest_string, 0, v_comma_loc - 1);
    v_rest_string := substr(v_rest_string,
                            v_comma_loc + 1,
                            length(v_rest_string) - 1);
    if p_target = v_cut_string then
      v_flag := 'Y';
    end if;
    v_comma_loc := instr(v_rest_string, ',');
    if v_comma_loc = 0 and length(v_rest_string) > 0 then
      if p_target = v_rest_string then
        v_flag := 'Y';
      end if;
    end if;
  end loop;
  return v_flag;
end;


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马