当前位置: 代码迷 >> Oracle管理 >> 寫1個函數(用Oracle完成)
  详细解决方案

寫1個函數(用Oracle完成)

热度:541   发布时间:2016-04-24 04:18:58.0
寫一個函數(用Oracle完成)
寫一個函數(用Oracle完成)
傳遞的值是: {name}test{worker_id}S0888{EMAIL}test@mic.com.tw   等 以{}+value形式的一串有規則字符
要求根據{}中的內容得到value
如果  輸入{name},則得到test
      輸入{worker_id},則得到S0888

------解决方案--------------------

create or replace function f_get_value(keystr varchar2,source_str varchar2) return varchar2
is
v_idx number := 0;
v_p_idx number := 0;
v_v_idx number := 0;
v_key_num number := 0;
v_len number := 0;
v_result varchar2(64);
begin 
  v_key_num := regexp_count(source_str,'{\w+}');
  v_len := length(source_str);
  v_v_idx := instr(source_str,keystr);
  for i in 1..v_key_num loop
    v_idx := instr(source_str,'{',1,i);
    if v_idx > v_v_idx then
      v_p_idx := v_idx;
      exit;
    end if;
  end loop;
  if v_p_idx = 0 and v_v_idx != 0 then
    v_p_idx := v_len+1;
  end if;
  v_result := substr(source_str,v_v_idx+length(keystr),v_p_idx-v_v_idx-length(keystr));
  return v_result;
exception
  when others then
    v_result := 'ERROR';
    return v_result;
end f_get_value;

------解决方案--------------------
引用:
寫一個函數(用Oracle完成)
傳遞的值是: {name}test{worker_id}S0888{EMAIL}test@mic.com.tw   等 以{}+value形式的一串有規則字符
要求根據{}中的內容得到value
如果  輸入{name},則得到test
      輸入{worker_id},則得到S0888


create or replace function getValue(str_i_val in varchar2, str_i_key varchar2) return varchar2 as
begin
    if instr(str_i_val
------解决方案--------------------
'{', str_i_key) = 0 then
      return 'NOT FOUND';
    else
      return substr(str_i_val
------解决方案--------------------
'{', instr(str_i_val
------解决方案--------------------
'{', str_i_key)+length(str_i_key),
      instr(str_i_val
------解决方案--------------------
'{', '{', instr(str_i_val
------解决方案--------------------
'{', str_i_key)+length(str_i_key)) - (instr(str_i_val
------解决方案--------------------
'{', str_i_key)+length(str_i_key)));
    end if;
end;


第一个参数传入你的这个参数{name}test{worker_id}S0888{EMAIL}test@mic.com.tw   
第二个参数传入{name}或者{EMAIL}
  相关解决方案