oracle将id串转换为名字串
今天碰到一个小问题,需要将一个字段中用逗号隔开的id串,转换为名字的样子显示出来,本着方便的原则,就在oracle中写了个函数,完美的解决了这个问题,
/**将安全警示通告类型的id串转换为名字串,方便显示用**/ create or replace function risk_ids_to_names( av_str varchar2 --要转换的ids ) return varchar2 is lv_str varchar2(1024); lv_strOfIndex varchar2(1024); risk_id varchar(200); risk_name varchar2(200); lv_length number; begin lv_str := rtrim(av_str); lv_str := concat(lv_str,',');/**最后追加一个逗号,否则得到的结果集会缺少最后一个**/ lv_length := length(lv_str); if lv_length = 0 then lv_strOfIndex := '待定'; else /**循环id获取名字拼接字符串**/ for i in (select regexp_substr(lv_str,'[^,]+',1,rownum) as riskId from dual connect by rownum<=length(regexp_replace(lv_str, '[^,]', null))) loop risk_id := i.riskid; select typename into risk_name from SEC_ATTACHREPORT_TYPE where typeid = i.riskid; risk_name := concat(risk_name,',');/**拼接名字和逗号**/ lv_strOfIndex := concat(lv_strOfIndex,risk_name);/**在原先的名字字符串后面追加**/ end loop; lv_strOfIndex := substr(lv_strOfIndex,1,length(lv_strOfIndex) -1 );/**去掉最后的逗号**/ end if; return lv_strOfIndex; end risk_ids_to_names;
这个函数中用到了拆分id串,for循环,因为对直接在Oracle中写函数不太熟悉,是一边百度一边写成的,碰到了一些麻烦,但功夫不负有心人,又成长了一点点。哈哈。
/**将ids字符串用逗号分割开,以结果集的形式输出出来**/ select regexp_substr('a,b,c','[^,]+',1,rownum) as riskId from dual connect by rownum<=length(regexp_replace('a,b,c', '[^,]', null))
学如逆水行舟,不进则退