为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕侠2389804 2022-04-15 11:11:21
函数这样写,create or replace function NextChar(in_str in varchar2,in_char in varchar2)return varchar2 isout_next_char varchar2(10) default null;temp int;begintemp := 0;select instr(in_str, in_char) into temp from dual; --这里无效if temp != 0 thenout_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,导致函数返回值总是为空。这是什么原因
查看完整描述

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;

我这么用测试后没问题



查看完整回答
反对 回复 2022-04-19
?
繁花如伊

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 ;自己试试。

查看完整回答
反对 回复 2022-04-19
  • 2 回答
  • 0 关注
  • 246 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信