转自:http://dacoolbaby.iteye.com/blog/1772156
根据需求,写了一段方法。
用于识别以下的情况:
判断 字符串A 在用逗号分隔的字符串B中是否存在
如:
v_str_a = aa ;
v_str_b= aa,bb,dd,cc ;
如上,就返回Y,否则返回N。
添加了一些校验。
以后可以根据需求,按照指定的分隔符,提取字符串。
毕竟Oracle的字符串解析比较麻烦,能封装就封装。
1 create or replace function func_str_inArray(p_target varchar2, 2 p_str_array varchar2) 3 return varchar2 is 4 5 v_flag varchar2(1); 6 v_comma_loc int; 7 v_cut_string varchar2(300); 8 v_rest_string varchar2(2000); 9 begin 10 ------------------------ 11 --p_target 不能包含","!!!注意!! 12 --info:这个函数用于识别目标字符串,是否在一串用“,”分开的字符串内 13 ------------------------ 14 v_flag := 'N'; 15 v_comma_loc := instr(p_str_array, ','); 16 17 --如果是对比字符串是空,则返回false 18 if nvl(p_str_array, '') = '' then 19 return 'N'; 20 end if; 21 --如果没有逗号,直接比较 22 if length(p_str_array) > 0 and v_comma_loc = 0 then 23 if p_target = p_str_array then 24 return 'Y'; 25 else 26 return 'N'; 27 end if; 28 end if; 29 30 v_rest_string := p_str_array; 31 32 while v_comma_loc > 0 loop 33 v_cut_string := substr(v_rest_string, 0, v_comma_loc - 1); 34 v_rest_string := substr(v_rest_string, 35 v_comma_loc + 1, 36 length(v_rest_string) - 1); 37 38 if p_target = v_cut_string then 39 v_flag := 'Y'; 40 end if; 41 42 v_comma_loc := instr(v_rest_string, ','); 43 44 if v_comma_loc = 0 and length(v_rest_string) > 0 then 45 if p_target = v_rest_string then 46 v_flag := 'Y'; 47 end if; 48 end if; 49 50 end loop; 51 52 return v_flag; 53 54 end;