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.aiyiweb.com/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