在PLSQL中实现分割字符串

首先在SQL窗口创建table类型变量,用来声明函数返回的数组类型:

/*变量类型声明*/
CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);

/*函数*/
CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)  
  RETURN ty_str_split  
  IS  
  j INT := 0;  
  i INT := 1;  
  len INT := 0;  
  len1 INT := 0;  
  str VARCHAR2 (4000);  
  str_split ty_str_split := ty_str_split ();  
  BEGIN  
    len := LENGTH (p_str);  
    len1 := LENGTH (p_delimiter);   
    WHILE j < len  
      LOOP  
        j := INSTR (p_str, p_delimiter, i);   
		/*INSTR(x, find_string [, start] [, occurrence]);搜索find_string在x中并返回它出现的位置*/
		
		/*如果String2在String1中没有找到,instr函数返回0*/
       IF j = 0  THEN  
            j := len;  
            /*j等于待分割的字符串最后一个位置*/
            str := SUBSTR (p_str, i);    
            /*str等于将待分割字符串从i位置分割到结束位置*/
	    /*添加到数组*/
            str_split.EXTEND;  
            str_split (str_split.COUNT) := str;   
            /*数组.count可以获取到数组实际长度*/
	    /*i代表待分割的字符串开始分割的位置,len代表待分割字符串长度或结束位置,如果待分割的字符串开始分割的位置>=待分割字符串长度或结束位置则分割结束,退出循环*/
            IF i >= len  
            THEN  
              EXIT;  
            END IF;  
        ELSE  
            str := SUBSTR (p_str, i, j - i);  
	    /*SUBSTR(x, start [, length]); 返回x的一个子开始于由start指定的位置。可选长度为子字符串*/
	    /*i变成j+分割符长度的位置*/	
            i := j + len1;  
	    /*添加到数组*/
            str_split.EXTEND;  
            str_split (str_split.COUNT) := str;  
        END IF;  
      END LOOP;  
      
    RETURN str_split;  
END fn_split;

测试代码:

/*测试代码*/
declare
  -- Non-scalar parameters require additional processing 
  s ty_str_split;
  len INTEGER;
begin
  -- Call the function
  s := fn_split('1,2,3',',');
  len :=s.count;
  dbms_output.put_line('数组长度:'||len);
  FOR i IN 1..len 
    LOOP
      dbms_output.put_line(s(i));
    END LOOP;
  
end;

输出:


参考易百教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值