为什么在oracle中建立一个function,在里面使用instr函数没有效果?

函数这样写,
create or replace function NextChar(in_str in varchar2,
in_char in varchar2)
return varchar2 is
out_next_char varchar2(10) default null;
temp int;

begin
temp := 0;
select instr(in_str, in_char) into temp from dual; --这里无效

if temp != 0 then
out_next_char := substr(in_str, temp, 2);
end if;
return out_next_char;
end NextChar;

目的是

输入参数in_str ‘A;B;C’ 参数in_char ‘B’ 目的是返回B后面的字母 ‘C ’

但是 select instr(in_str, in_char) into temp from dual 怎么样调试都是0,导致函数返回值总是为空。这是什么原因

慕侠2389804
浏览 247回答 2
2回答

眼眸繁星

给你改了create or relpace function NextChar(in_str in varchar2,in_char in varchar2)return varchar2isout_next_char varchar2(10) default null;temp int;beginselect instr(in_str, in_char) into temp from dual;if temp != 0 thenout_next_char := substr(in_str, temp+2, 1);elseout_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;我这么用测试后没问题

繁花如伊

我感觉你不理解这个函数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 thenout_next_char := substr(in_str, temp, 2);end if;select instr('A;B;C',3, 2) from dual ;自己试试。
打开App,查看更多内容
随时随地看视频慕课网APP