oracle 存储过程中分割字符串
我写了一个存储过程用于分割一个字符串,用 '. '分开,希望得到每个子串的值,也就是 '. '之间的内容.但是有问题.大家帮我看看哦.
CREATE OR REPLACE PROCEDURE pro_componentmodify (p_string IN VARCHAR2,p_string_size IN NUMBER)
IS
p_start NUMBER := 1; --开始的指针,这个为依次增加的
p_find NUMBER := 1; --找到.的开始的字符位置
p_getnum NUMBER := 0; --需要获得的子串的长度
p_num NUMBER := p_string_size; --得到字符串的总长度
flag VARCHAR2 := '. '; --分割符
substring VARCHAR2; --用于存储的子串
BEGIN
UPDATE MS_COMPONENTCONF --先把所有的设置为 '0 '
SET PROPVALUE = '0 '
WHILE(p_start <= p_num) LOOP --如果得到的字符不为 '. '
IF ((SUBSTR(p_string,p_start,1) = flag) or (p_start = p_num))
THEN
substring := SUBSTR(p_string,p_find,p_getnum); --得到子串
UPDATE MS_COMPONENTCONF --先把子串的设置为 '1 '
SET PROPVALUE = '1 '
WHERE COMPONENTNAME = substring;
p_find := p_start + 1;
END IF;
p_start := p_start + 1;
p_getnum := p_getnum + 1;
END LOOP;
END pro_componentmodify;
[解决办法]
我的异常网推荐解决方案:oracle存储过程,http://www.myexception.cn/oracle-develop/177537.html
[解决办法]
给个测试数据,好看些
[解决办法]
用这个试试,看是不是你想要的
create procedure p_csdn_test2
(
i_string varchar2
)
as
v_substr varchar2(100); --子串长度根据程序需要修改
v_pos1 integer;
v_pos2 integer;
v_num integer;
begin
v_pos1 := 1;
v_num := 1;
while instr(i_string, '. ',v_pos1+1) <> 0 loop
v_pos2 := instr(i_string, '. ',v_pos1+1);
if v_num = 1 then
if instr(i_string, '. ',v_pos1,v_num) = 1 then
v_substr := substr(i_string,v_pos1+1,v_pos2-1);
else
v_substr := substr(i_string,v_pos1,v_pos2-1);
end if;
else
v_substr := substr(i_string,v_pos1+1,v_pos2-v_pos1-1);
end if;
/*
clause --对子串的处理
*/
v_num := v_num + 1;
v_pos1 := v_pos2;
end loop;
v_substr := substr(i_string,v_pos1+1);
/*
clause --对子串的处理
*/
end;
[解决办法]
UPDATE 用 immediate execute语句处理
[解决办法]
不会是 没加 分号 这样的低级错误吧?
[解决办法]
分号,目前可以明显得看到是这个原因
[解决办法]
按理说,这里不必 需要 immediate execute
