2 回答
TA贡献1873条经验 获得超9个赞
给你改了
create or relpace function NextChar
(in_str in varchar2,
in_char in varchar2)
return varchar2
is
out_next_char varchar2(10) default null;
temp int;
begin
select instr(in_str, in_char) into temp from dual;
if temp != 0 then
out_next_char := substr(in_str, temp+2, 1);
else
out_next_char := null;
end if;
return out_next_char;
end NextChar;
说一下你的错误
你一开始就把temp 赋值了,下边以后当然都按0来执行了,也没个变化
再一个,你substr用法不对
substr(字段名,1,2)
1是起始位置,2是截取长度,但是你写的temp是那个b的起始位置,但实际上你要取的是b起始位置+2的那个位置,长度应该取1,也就是c的那一位
还有如果所取的字符不在字符串中,我直接输出空了,你看着自己改一下吧
select NextChar('a;b;c','b') from dual;
select NextChar('a;b;c','d') from dual;
我这么用测试后没问题
TA贡献2012条经验 获得超12个赞
我感觉你不理解这个函数instr
函数返回的是什么?
select instr(‘A;B;C’, ‘B’) from dual 返回的是 in_char在 instr 的位置 按你输入(输入参数in_str ‘A;B;C’ 参数in_char ‘B’)的是 3,如果没找到返回的是0.
按照if temp != 0 then
out_next_char := substr(in_str, temp, 2);
end if;
select instr('A;B;C',3, 2) from dual ;自己试试。
- 2 回答
- 0 关注
- 246 浏览
添加回答
举报