黑马程序员技术交流社区

标题: Oracle SQL判断字符串是否在目标字符串中的函数,已撞破头 [打印本页]

作者: 约吗^_^    时间: 2015-11-21 22:58
标题: Oracle SQL判断字符串是否在目标字符串中的函数,已撞破头
自己写的代码,请各位大神多多指点,看看哪里还可以进行效率优化,与君共勉{: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;







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2