轉自:http://dacoolbaby.iteye.com/blog/1772156函數
根據需求,寫了一段方法。oop
用於識別如下的狀況:spa
判斷 字符串A 在用逗號分隔的字符串B中是否存在rest
如:code
v_str_a = aa ;blog
v_str_b= aa,bb,dd,cc ;字符串
如上,就返回Y,不然返回N。get
添加了一些校驗。string
之後能夠根據需求,按照指定的分隔符,提取字符串。it
畢竟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;