当前位置: 代码迷 >> Oracle开发 >> oracle 存储过程中分割字符串解决方法
  详细解决方案

oracle 存储过程中分割字符串解决方法

热度:72   发布时间:2016-04-24 07:54:37.0
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.daimami.com/search?q=177537
------解决方案--------------------
给个测试数据,好看些
------解决方案--------------------
用这个试试,看是不是你想要的

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);
  相关解决方案