如有一个表code_library
codeno | itemno | itemname |
YesNo | 1 | 是 |
YesNo | 2 | 否 |
下边的函数为转换写法
以下函数为通过字典代码获取数据字典中的字典名称
CREATE OR REPLACE FUNCTION getSplitCodeName(pString varchar2,pCode varchar2,pSplit varchar2)
--pString 字符串
--pCode CodeNo
--pSplit 分隔符
--注:字符串不能以分割符结尾
--return 定义返回值类型
return varchar2
--is定义变量
is
--varchar2的最大存储长度是4000
vString varchar2(4000);
sString varchar2(4000);
v_idx interger;
v_str varchar2(500);
-- :=赋值符 ||连接符
-- ":="是赋值语句 如: l_name :='sky';...
-- "=" 是判断是否相等. 如: if 1=1 then...
-- ":" 是变量绑定 如: if :P_NAME ='sky' then...
v_strs_last varchar2(4000) := pString || pSplit;
dCount number;
begin
sString := '';
loop
--注:在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置。只检索一次,也就是说从字符的开始到字符的结尾就结束,第一次出现的位置。
v_idx := instr(v_strs_last,pSplit);
--if后面的语句csdn目前不能识别,所以加上了注释标志,用的时候请去掉
if --v_idx > 0
then
--nvl(str1, str2) 如果str1为null,则返回表达式str2的值。如果str1不为null,则返回表达式str1的值。
-- 格式1: substr(string string, int a, int b);
-- 格式2:substr(string string, int a) ;
-- 解释:
-- 格式1:
-- 1、string 需要截取的字符串
-- 2、a 截取字符串的开始位置(注:当a等于0或1时,都是从第一位开始截取)
-- 3、b 要截取的字符串的长度
-- 格式2:
-- 1、string 需要截取的字符串
-- 2、a 可以理解为从第a个字符开始截取后面所有的字符串。
v_str :=nvl(substr(v_strs_last,0,v_idx-1));
v_strs_last := substr(v_strs_last,v_idx+1);
select count(1) into dCount form Code_library where ItemNo = v_str and CodeNo = pCode;
--if后面的语句csdn目前不能识别,所以加上了注释标志,用的时候请去掉
if --dCount>0
then
select nvl(ItemName,'') into vString form Code_library where ItemNo = v_str and CodeNo = pCode;
end if;
else
v_str := v_strs_last;
exit;
end if;
end loop;
return substr(sString,2);
end;
使用方法为
select getSplitCodeName('1,2','YesNo',',') as itemname form dual;
itemname |
是,否 |