PLSQL 实现split

PLSQL 实现split:
 

 

FUNCTION  Get_Field_Value
    (
        in_str  
IN   VARCHAR2 ,
        findstr 
IN   VARCHAR2 ,
        field   
IN   INTEGER
    ) 
RETURN   VARCHAR2   AS
        tmp_msg 
VARCHAR2 ( 20 );
        
--  取字段 值 ,field start from 0 
        startidx  INTEGER ;
        endidx   
INTEGER ;
    
    
BEGIN
        startidx :
=   1 ;
        endidx   :
=   1 ;
    
        
FOR  i  IN   1  .. field
        LOOP
            
-- INSTR(in_string,'|',tmp_pos);
             -- substr(in_string,tmp_pos,tmp_pos1-tmp_pos); 
             IF  i  >   1   THEN
                startidx :
=  INSTR(in_str, findstr, startidx);
                
IF  startidx  =   0   THEN
                    
RETURN   NULL ;
                
END   IF ;
                startidx :
=  startidx  +  length(findstr);
            
END   IF ;
        
END  LOOP;
    
        endidx :
=  INSTR(in_str, findstr, startidx);
        
IF  endidx  =   0   THEN
            endidx :
=  length(in_str)  +   1 ;
        
END   IF ;
    
        
RETURN  substr(in_str, startidx, endidx  -  startidx);
    
    EXCEPTION
        
WHEN  OTHERS  THEN
            
RETURN   NULL ;
    
END ;

 


例二

 

TYPE ARRAY  IS  TABLE  OF  VARCHAR2( 255);
FUNCTION SPLIT(P_STR  IN  VARCHAR2, P_DELIMITER  IN  VARCHAR2RETURN ARRAY  IS
    J          INT : =  0;
    I          INT : =  1;
     LEN        INT : =  0;
    LEN1       INT : =  0;
     STR        VARCHAR2( 4000);
    STR_SPLIT ARRAY : = ARRAY();
   BEGIN
     LEN  : = LENGTH(P_STR);
    LEN1 : = LENGTH(P_DELIMITER);
  
     WHILE J  <  LEN LOOP
      J : = INSTR(P_STR, P_DELIMITER, I);
    
       IF J  =  0  THEN
        J   : =  LEN;
         STR : = SUBSTR(P_STR, I);
        STR_SPLIT.EXTEND;
        STR_SPLIT(STR_SPLIT. COUNT) : =  STR;
      
         IF I  >=  LEN  THEN
           EXIT;
         END  IF;
       ELSE
         STR : = SUBSTR(P_STR, I, J  - I);
        I   : = J  + LEN1;
        STR_SPLIT.EXTEND;
        STR_SPLIT(STR_SPLIT. COUNT) : =  STR;
       END  IF;
     END LOOP;
  
     RETURN STR_SPLIT;
   END SPLIT;

 

调用:

STR_SPLIT := SPLIT('A,B,C,D,E,F', ',');
FOR I IN 1 .. STR_SPLIT.COUNT LOOP
      DBMS_OUTPUT.PUT_LINE(I);
END LOOP;

转载于:https://www.cnblogs.com/benio/archive/2011/09/09/2172099.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值