【发布时间】:2018-10-11 07:06:50
【问题描述】:
我正在处理一项任务,目标是编写一个具有 2 个输入的过程,一个字符串和一个字符,然后从字符串中删除字符。
示例:RemoveAll(123-456-789, '-') 将输出:123456789。
create or replace procedure MyRemoveAll
(p_text varchar2, p_char_1 char) as
v_temp varchar2(100);
BEGIN
v_temp := p_text;
WHILE instr(v_temp, p_char_1) != 0 LOOP
v_temp := substr(v_temp, 1, instr(v_temp, p_char_1)-1)
|| substr(p_text, instr(v_temp, p_char_1)+1);
END LOOP;
dbms_output.put_line (v_temp);
END;
/
exec MyRemoveAll('123456789', '*');
exec MyRemoveAll('123-456789', '-');
exec MyRemoveAll('123*456*789', '*');
创建过程时我没有收到任何错误,并且前两次执行工作正常。我试过只是运行: dbms_output.put_line (instr(123*456*789, *));
这给了我 4 的输出。所以它应该注册 while 循环的条件,但 SQL Plus 只是在循环处停止。 (就像它在做一个无限循环,但事实并非如此)。
有人有什么想法吗?
【问题讨论】:
-
看来
MyRemoveAll只会实现replace()。 -
一个字符串和一个字符 -
char只是一种特殊的字符串,它添加空格以将值填充到其最大长度。这几乎没有什么好的用途,实际上它导致的问题多于它解决的问题,因此建议永远不要使用它。
标签: plsql while-loop