我编写了一个在plsql中正确执行但是输出错误的程序。从逻辑上讲,我没有看到任何代码问题。这是代码:
begin
inpstr := rtrim(ltrim(regexp_replace(inp,'\s{2,}','')));
lastpos := instr(inpstr,' ',-1);
out3 := SUBSTR(inpstr, INSTR(inpstr,' ',-1) + 1);
pos := instr(inpstr,' ');
out1 := substr(inpstr,1,pos);
out2 := substr(inpstr,pos,lastpos);
end;
O / P:
dbms_output.put_line('First Word:: '||out1||' '||'Second Word:: '||out2||' '||'Lastword:: '||out3);
PROCEDURE SPLITWORDS compiled
anonymous block completed
First Word:: Welcome Second Word:: to the world of analyti Lastword:: analytics!
但是第二个词应该“回归'世界',但它会带来分析。
有谁能告诉我我的代码有什么问题。
谢谢, 地塞米松。
答案 0 :(得分:0)
substr
函数的第三个参数是子字符串的长度,而不是结束字符的位置。从pos
(见下文)中减去lastpos
将允许您的代码正常工作。
out2 := substr(inpstr, pos, lastpos - pos);
答案 1 :(得分:0)
当您指定out2
时,您至少需要从pos
中减去lastPos
。
因为样本文本中的lastPos
“欢迎来到分析世界!”将是24而pos
将有8,所以来自pos 8的子字符串长度为24 ......右:“到分析世界”