17,082
社区成员
发帖
与我相关
我的任务
分享
create or replace function squeeze1(p_string in varchar2) return varchar2 is
v_string varchar2(512):='';
c_char varchar2(2);
n_len number:=length(p_string);
i binary_integer:=1;
j binary_integer;
begin
while(i<=n_len)
loop
c_char:=substr(p_string,i,1);
v_string:=v_string||c_char;
if(c_char=' ') then
j:=i+1;
while(substr(p_string,j,1)=' ')
loop
j:=j+1;
end loop;
i:=i+1;
end if;
end loop;
return(v_string);
end squeeze1;
[TEST1@orcl] SQL>select squeeze1('aaa bb') from dual;
select squeeze1('aaa bb') from dual
*
第 1 行出现错误:
ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
ORA-06512: 在 "TEST1.SQUEEZE1", line 11
declare
v_string varchar2(50):='';
v_str varchar2(50):='';
c_char char;
n_len number;
i number:=1;
j number;
begin
n_len :=length(trim(&p_string));
--dbms_output.put_line(n_len);
while(i<=n_len)
loop
c_char:=substr(trim(&p_string),i,1);
--dbms_output.put_line(c_char);
v_string:=v_string||c_char;
--dbms_output.put_line(v_string);
if(c_char=' ') then
j:=i+1;
--dbms_output.put_line('in j:'||j);
while substr(trim(&p_string),j,1)=' ' loop
j:=j+1;
--dbms_output.put_line('loop j'||j);
--dbms_output.put_line('char is:'||substr(&p_string,j,1));
end loop;
i:=j-1;
--dbms_output.put_line('loop'|| i);
end if;
i:=i+1;
end loop;
dbms_output.put_line(v_string) ;
end;